Image控件重绘闪烁问题(100分)

  • 主题发起人 主题发起人 酸橙子
  • 开始时间 开始时间

酸橙子

Unregistered / Unconfirmed
GUEST, unregistred user!
我在Image控件上绘制"人口树"(不明白没关系),希望能够在MouseMove的时候高亮显示一块
矩形区域,因此需要不断重绘当前区域。现在问题是:整个画面闪烁的厉害。不知哪位高手
有好的解决办法?
 
procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered:=true;
end;
 
如果只是简单的图片的变化或者翻转,我建议你用多个小的Timage在上面用,用loadfrom**和
visible的办法就可以了, 不要试着来控制gdi下image的重绘,它太容易被其他东西影响了.
OnMouseMove 中可以试一下
 
doublebuffered应该可以解决问题。
mousemove里是怎么写的,可以给大家看看是否可以优化
 
任何一个继承自TWinControl的类都有DoubleBuffered这个属性,如果你的IMAGE放在PANEL
上,你就将Panel的DoubleBuffered设为TRUE,如果在FORM上,就设FORM的。即可。
 
先在内存中画,再将图刷过来。Image既要刷新鼠标移动,又要画图当然要闪了。
如果你不明白可以看看《window编程》一书,有详细解答,不过代码是c的
 
设置TWinControl的派生类的doubleBuffered属性是有用,但是在一个TGraphicControl的
派生类中如何使其不闪烁?我写了一个控件TColck=Class(TShape),重绘时也发生了闪烁
问题。我有一个想法,可不可以在TGraphicControl的某个派生类中,添加doubleBuffered
属性?
 
多谢各位大虾的鼎力相助!我试过在FormCreate()中添加DoubleBuffered:=true;可惜效果
不是很明显。正如dadabox所言:“任何一个继承自TWinControl的类都有DoubleBuffered
这个属性。”但是Timage是继承自TGraphicControl,没有DoubleBuffered,即便是改变其
容器的DoubleBuffered属性,又能对它本身起什么明显作用呢?还有别的什么途径吗?
yr220,所说的用多个小的Image来做,在我这里不现实。因为我这个是带坐标的,整个
画面上的小矩形根据数据库里面的数据,大概有200个,一个个的画我受不了,系统估计也
受不了。
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
759
import
I
后退
顶部