我做了一个控件,继承自TGraphicControl,在paint中采用了先创建一个兼容的Bitmap,然后在这里画图,最后将Bitmap中画好的图再BitBlt到当前Canvas中。使用这样的双缓存的方法就是想解决刷新时屏幕闪动的问题,可是依然闪动。各位高人有何办法?
具体代码:
MemBitmap := CreateCompatibleBitmap(Canvas.Handle, ClientRect.Right, ClientRect.Bottom);
MemDC := CreateCompatibleDC(Canvas.Handle);
OldBitmap := SelectObject(MemDC, MemBitmap);
DC:=Canvas.Handle;
//为了避免再创建一个Canvas,就使用类中的,只是将DC付给了它
Canvas.Handle:=MemDC; BeginPaint(WindowFromDC(DC), PS);
//使用Canvas绘图
//将Canvas的HDC恢复
//BitBlt
EndPaint(WindowFromDC(DC), PS); SelectObject(MemDC, OldBitmap);
DeleteDC(MemDC);
DeleteObject(MemBitmap);
具体代码:
MemBitmap := CreateCompatibleBitmap(Canvas.Handle, ClientRect.Right, ClientRect.Bottom);
MemDC := CreateCompatibleDC(Canvas.Handle);
OldBitmap := SelectObject(MemDC, MemBitmap);
DC:=Canvas.Handle;
//为了避免再创建一个Canvas,就使用类中的,只是将DC付给了它
Canvas.Handle:=MemDC; BeginPaint(WindowFromDC(DC), PS);
//使用Canvas绘图
//将Canvas的HDC恢复
//BitBlt
EndPaint(WindowFromDC(DC), PS); SelectObject(MemDC, OldBitmap);
DeleteDC(MemDC);
DeleteObject(MemBitmap);
解决方案 »
- 过大年大散分-3
- 请教各位大侠!如何在rave中打印数据库中的JPG图像呢?
- 由于工作与delphi没有关系,出售一些原来买的delphi书
- 如何在运行时将选中的多个控件同时移动?
- 来者有分------飞鹰论坛Delphi版真诚的邀请各路英豪加盟!!
- 各位老师,请帮我怎么样能导出数据到execl里
- 请问如何用代码设置默认打印机的纸张类型及纸张大小???? 急!!!!!!
- delphi里如何将word文档存入MSSQL数据库里,有怎样调出来啊?
- 关于数据查询的问题
- 如何在dbmemo中使指定的字符串红色或者高亮显示???
- TWebbrowser怎样使用Frame中的内容?
- 简单的问题:为什么有时打开ie特别慢!
我以前也写了一个控件,自己写paint部分的代码,后来发现也是闪的比较厉害.constructor TCustomCellGrid.Create(AOwner: TComponent);
var
i,j:integer;
begin
inherited;
DoubleBuffered := True;
我是在form1.canvas是作图,作好后再copy到一个image控件上。
作图时一点也没有屏幕闪动,但copy时,要闪动一次,这大概无法避免吧!
如果有其他控件的绘制,设该控件的缓冲为假。
你的那次闪动是IMAGE自动重绘产生的.用PAINTBOX就没了!