图象组件如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,我们将标签放在此面板上移动面板就不会闪烁了。您不妨一试。
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,我们将标签放在此面板上移动面板就不会闪烁了。您不妨一试。
解决方案 »
- 老大们,excel自动存盘咋写?!在线等!
- 如何在Z在程序中调用FTP.EXE ,然后登陆FTP, 把服务器上文件抓下来.然后关闭FTP
- 关于文件读写错误!Stream Read Error
- 如何让一个ListBox在非ListBox中点击时自动隐藏,就像Combobox的下拉框一样,当在窗体其他任意地方点击时,下拉框自动隐藏
- 双击ActionManager1后,怎么就找不到 添加 categories属性值,谢谢
- 低级问题,急啊!
- 我现在在昆明,十月份以后打算去深圳,熟悉深圳的朋友给点意见??
- 求救!如何用TIdFTPServer或TidTCPServer来创建一个主目录(如IIS那样)?
- 各个DateTimePicker中的小时、分钟等值是否完全一样?是多少?
- 请教:如何通过ADO方法取得数据结果集的记录个数
- NMUDP 的sendstream 怎么才能把text的内容发送出去阿
- web开发的(InternetExpress)错误!(Delphi6)
另外,背景图最好使用种子填充的方式,比把一幅整图绘到窗体上快procedure TForm1.FormPaint(Sender: TObject);
var
bmp:TBitmap;
i,j,bmpWidth,bmpHeight:integer;
begin
try
bmp:=Tbitmap.Create ;
bmp.LoadFromFile('c:\winnt\blue lace 16.bmp');
bmpWidth:=bmp.Width ;
bmpHeight:=bmp.Height ;
for i:=0 to (width div bmpWidth) do begin
for j:=0 to (height div bmpHeight) do begin
Canvas.Draw(i*bmpWidth,j*bmpHeight,bmp);
end;
end;
finally
bmp.Free ;
end;end;
对于标签,用TStaticText
begin
Brush.Bitmap:=Self.Image1.Picture.Bitmap;
end;
var
bmp:Tjpegimage;
i,j,bmpWidth,bmpHeight:integer;
begin
try
bmp:=Tjpegimage.Create ;
bmp.LoadFromFile('c:\image1\language.jpg');
bmpWidth:=bmp.Width ;
bmpHeight:=bmp.Height ;
for i:=0 to (width div bmpWidth) do begin
for j:=0 to (height div bmpHeight) do begin
Canvas.Draw(i*bmpWidth,j*bmpHeight,bmp);
end;
end;
finally
bmp.Free ;
end;
begin
Brush.Bitmap:=Self.Image1.Picture.Bitmap;
end;不要光等待,要试试!
有什么办法吗??
form1.Canvas.Draw(x,y,TGraphics);