有关闪烁的问题。(50分)

  • 主题发起人 主题发起人 snakeqi
  • 开始时间 开始时间
S

snakeqi

Unregistered / Unconfirmed
GUEST, unregistred user!
现在有个程序,需要在窗口上画个钟,每隔半秒重绘一次,可闪得厉害,怎么解决?
 
处理 WM_ERASEBKGND 消息

private
{ Private declarations }
procedure WMEraseBkGnd(var Msg :TWMEraseBkGnd);message WM_ERASEBKGND;
procedure TForm1.WMEraseBkGnd(var Msg :TWMEraseBkGnd);
begin
inherited;
Msg.Result :=LRESULT(False);
end;
 
我用的是copyrect,可还是闪。
 
用 form1.DoubleBuffered:=True;
试试
加在Form1.Create中.
 
哈哈,不闪了,谢谢zhangkan,给你多点分。
 
老雪没有分?!
闪烁一般是由于控件在Paint时的时候会清空一次背景!
如果控件不是承之Graphi时,窗口的重画将不再对控件的范围内起作用!!
如果是Graphi子类,象zhankan所提也是一种方法,如果用两个TBitmap
模拟又缓冲可有更佳的效果! 一般不要使用Canvas的Draw,而使用Api,
尤其是TImageList的Draw,速度上两者相差很远!!!
 
有个朋友说用Application.ProcessMessages 不知道对不对哦!
 
多人接受答案了。
 
后退
顶部