摘自神秘岛:
?问:
图象或文本在移动时会发生抖动和屏幕的闪烁,如何处理?
--------------------------------------------------------------------------------
!答:
图象组件如Image、文本如Label在移动时,屏幕会发生闪烁,如果图象较小或者文本中字体较小,可能不会很明显。以下代码:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Image1.Left := Image1.Left + 1;
Label1.Left := Label1.Left + 1;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Interval := 10;
Timer1.Enabled := True;
end;
闪烁的情况会随图形的增大而增加,会随文字的变大、增多而增加。简单地分析一下它的原因,是因为每一次一个组件的位置属性如Left,Top等更改时,会自动触发它的刷新、重画过程。当重画的次数增大到某一程度时,我们便会感觉到闪烁。对于此问题,解决的方案很奇怪也有点难以解释,就是不要更改图象或者标签的位置,而让它们放在一个面板(Panel)内,然后只修改面板的位置属性,就不会闪烁。
为了使面板不会影响瞻观,可以使它的AutoSize属性为真。试试这个:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Panel1.Left := Panel1.Left + 1;
Label1.Left := Label1.Left + 1;
end;
这样一来,图象的闪烁的基本消除了,就算多大的图象也不会闪烁。但是有一个问题,就是面板叠放的个数不能是偶数个,否则又会出现闪烁。真奇怪。
对于标签就没有这么幸运了,尽管放在面板上它的闪烁有所减少,但仍然较明显,属于不能忍受的程度,特别在领导面前演示时就更不好了。经过版主多方发掘,终于发现在LMD这套里组件里有一个面板:TLMDSimpleLabel,我们将标签放在此面板上移动面板就不会闪烁了。您不妨一试。