请进:画图问题 ( 积分: 300 )

  • 主题发起人 主题发起人 xgbing
  • 开始时间 开始时间
X

xgbing

Unregistered / Unconfirmed
GUEST, unregistred user!
PaintBox画图问题:主要是要显示几个复杂的数据波形,还要定时刷新,如果用普通的办法
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)

  PaintBox1->Canvas->Pen->Color=clRed;
  ...画刻度
   . . .
  画波形1,2,3...
  for(...)
  {
   PaintBox1->Canvas->MoveTo(..);
   PaintBox1->Canvas->LintTo(...);
  }

....

但每刷新一次数据,屏幕就会闪一次
后改为:
定义全局变量Graphics::TBitmap* bufBitmap;
数据每改变一次,重画bufBitmap一次
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
PaintBox1->Canvas->CopyRect(PaintBox1->ClientRect,bufBitmap->Canvas,bufBitmap->Canvas->ClipRect);
}

请教各位大哥有没有更好的办法,你们做过这样的程序吗,给点意见吧!
 
PaintBox画图问题:主要是要显示几个复杂的数据波形,还要定时刷新,如果用普通的办法
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)

  PaintBox1->Canvas->Pen->Color=clRed;
  ...画刻度
   . . .
  画波形1,2,3...
  for(...)
  {
   PaintBox1->Canvas->MoveTo(..);
   PaintBox1->Canvas->LintTo(...);
  }

....

但每刷新一次数据,屏幕就会闪一次
后改为:
定义全局变量Graphics::TBitmap* bufBitmap;
数据每改变一次,重画bufBitmap一次
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
PaintBox1->Canvas->CopyRect(PaintBox1->ClientRect,bufBitmap->Canvas,bufBitmap->Canvas->ClipRect);
}

请教各位大哥有没有更好的办法,你们做过这样的程序吗,给点意见吧!
 
你可以自己实现控件
实现控件的方法
TXXXX = class(TCustomControl)
重载
protected
procedure paint; override;

然后打开双缓冲
DoubleBuffered:= True;
或者控制控件不刷新背景

procedure WMEraseBkgnd(var Message: TMessage); message WM_ERASEBKGND;

procedure TXXXX.WMEraseBkgnd(var Message: TMessage);
begin
Message.Result := 1;
end;
这样在你自己的paint刷新控件前 控件不会使用背景色填充控件
如果你的控件上有其他子控件 最好加上 ControlStyle:= ControlStyle + [csAcceptsControls];在你的控件的Create
 
你的刷新速度是多少?
如果很快,我建议不要用 paint, 直接用线程(timer也可以)Draw 到 canvas上,这样不需要repaint
 
To 楼主:
你的第二个方法就可以啊。
 
寻找更好的办法
Shepherd的方法不太理解。。。
xuxiaohan的方法行不通。。。

等待高手。。。
 
xgbing:
我的方法行不通?你不会一分钟才刷新一次吧?如果这样慢那真的行不同,看看Gif 动画是怎样画的,难道靠wm_paint消息驱动?
Shepherd 的方法是最正宗的 防闪烁 的代码,DoubleBuffered + WM_ERASEBKGND(不擦除背景),刷新频率是多少,如果快,还是用我的方法,免除老是要 invilidate;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
637
import
I
I
回复
0
查看
770
import
I
I
回复
0
查看
825
import
I
后退
顶部