下面的语句要执行多长时间?
procedure TForm4.Timer3Timer(Sender: TObject);
var
x,y,j,i : integer;
begin
Image1.Picture.Assign(Bmp);
Image1.Canvas.Font.Size := 120;
Image1.Canvas.Font.Color := clSkyBlue;
SetBkMode(Image1.Canvas.Handle, TRANSPARENT);
Image1.Canvas.TextOut(0,Round(Screen.Height/2)-100,DateTimeToStr(Now()) + ' ');
end;
感觉好卡,不知道定时器设置多少才好。
[解决办法]
1.不要使用Image1组件,它会自动维护刷新维护窗体、会造成闪烁,卡的原因很可能也是它造成的。
2.使用TPaintBox组件,无闪烁,效率高。
不用assign,改成:
PaintBox1->Canvas->Daw(0,0,Bmp);
3.把下面设字体、颜色等语句放在其它位置预先执行一次即可,无需每次都设参数。
PaintBox1->Canvas->Font->Size = 120;
PaintBox1->Canvas->Font->Color = clSkyBlue;
PaintBox1->Canvas->Brush->Style = bsClear; //文字透明,不用API 了。
4.Timer事件函数里只有下面两个语句就行:
{
PaintBox1->Canvas->Daw(0,0,Bmp);
PaintBox1->Canvas->TextOut(0,Round(Screen.Height/2)-100,DateTimeToStr(Now()) + ' ');
}
5.Timer设500ms足够了。
其它:不象Image组件,PaintBox不会在窗体需要更新时自动帮你更新图像。如果timer一直不停就没问题,如果timer停止,需要你在相应Paint事件更新图像。