procedure TForm1.Button2Click(Sender: TObject);
begin
image1.Canvas.Pen.Color := clblack;
image1.Canvas.Brush.Color := clblack;
image1.Canvas.Rectangle(0, 0, image1.Width, image1.Height);
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i:integer;
begin
// for i:=0 to 10000 do
begin
// Button2Click(self);
image1.Canvas.Pen.Color := clred;
image1.Canvas.MoveTo(20,20);
image1.Canvas.LineTo(100,100);
// end;
end;
13 个解决方案
#1
把窗体的DoubleBuffer设为True
#2
Form1.DoubleBuffered := True;
#3
我拿你的运行了一下,没有出现闪烁。
是否还有别的代码?如果没有的话,我可以肯定的说,真的不闪烁啊。
要不然加一句form1.doublebuffered:=true;吧。
是否还有别的代码?如果没有的话,我可以肯定的说,真的不闪烁啊。
要不然加一句form1.doublebuffered:=true;吧。
#4
看你的代码,应该不会闪。
#5
DoubleBuffer设为True 在这个小程序里问题是解决了,可主要是想应用在高速采集数据画图中.不知道是否有其它好办法?
#6
這類處理最好是建立一個內存畫布,然後將所有操作都在此畫布上進行操作,操作結束一次,一次性話到窗體畫布上,基本可以解決閃屏問題。測試每秒10次刷新的,還沒出現過問題。高了沒測試,沒項目支持,也就沒研究,可以研究下。
#7
原理都是一样的,一个前景画布,一个缓冲画布,等到缓冲画布完全OK了,再覆盖前景画布。
完美解决闪烁。
完美解决闪烁。
#8
可以考虑使用delphix 使用directx技术来实现更高效率的绘图。或者试下使用gdiplus+
#9
gdiplus+……不是用在這裡的,那效率……還不如閃閃好了……
#10
那你就搜搜“双缓冲”技术。要效率再高的话就从驱动入手,像大型图形游戏那样,DelphiX可以试试。看你需求了。
#11
双缓冲绘图,先在内存里建一张内存位图,然后在这张位图上做图,最后把绘好的图一次画到界面上
注意要把窗体的重绘背景消息屏蔽
注意要把窗体的重绘背景消息屏蔽
#12
有很多办法可以提高效率,自己实现DoubleBuffer是一种比较好的解决方案。
#13
多高速?
通常 100 kb / s 以下的用 TCanvas ,够了。
再高一点,DirectX 吧。
通常 100 kb / s 以下的用 TCanvas ,够了。
再高一点,DirectX 吧。
#1
把窗体的DoubleBuffer设为True
#2
Form1.DoubleBuffered := True;
#3
我拿你的运行了一下,没有出现闪烁。
是否还有别的代码?如果没有的话,我可以肯定的说,真的不闪烁啊。
要不然加一句form1.doublebuffered:=true;吧。
是否还有别的代码?如果没有的话,我可以肯定的说,真的不闪烁啊。
要不然加一句form1.doublebuffered:=true;吧。
#4
看你的代码,应该不会闪。
#5
DoubleBuffer设为True 在这个小程序里问题是解决了,可主要是想应用在高速采集数据画图中.不知道是否有其它好办法?
#6
這類處理最好是建立一個內存畫布,然後將所有操作都在此畫布上進行操作,操作結束一次,一次性話到窗體畫布上,基本可以解決閃屏問題。測試每秒10次刷新的,還沒出現過問題。高了沒測試,沒項目支持,也就沒研究,可以研究下。
#7
原理都是一样的,一个前景画布,一个缓冲画布,等到缓冲画布完全OK了,再覆盖前景画布。
完美解决闪烁。
完美解决闪烁。
#8
可以考虑使用delphix 使用directx技术来实现更高效率的绘图。或者试下使用gdiplus+
#9
gdiplus+……不是用在這裡的,那效率……還不如閃閃好了……
#10
那你就搜搜“双缓冲”技术。要效率再高的话就从驱动入手,像大型图形游戏那样,DelphiX可以试试。看你需求了。
#11
双缓冲绘图,先在内存里建一张内存位图,然后在这张位图上做图,最后把绘好的图一次画到界面上
注意要把窗体的重绘背景消息屏蔽
注意要把窗体的重绘背景消息屏蔽
#12
有很多办法可以提高效率,自己实现DoubleBuffer是一种比较好的解决方案。
#13
多高速?
通常 100 kb / s 以下的用 TCanvas ,够了。
再高一点,DirectX 吧。
通常 100 kb / s 以下的用 TCanvas ,够了。
再高一点,DirectX 吧。