有一个ToolBar,在其上放置两个ToolButton,将ToolBar的Flat属性设为true,在OnCustomDrawButton事件中有如下代码:TPoint P;
GetCursorPos(&P);if(PtInRect(&(Button->BoundsRect),ToolBar->ScreenToClient(P)))
Sender->Canvas->Brush->Color=clRed;
else
Sender->Canvas->Brush->Color=clBtnFace;Sender->Canvas->FillRect(Button->BoundsRect);DefaultDraw=false;大致就是这样子,目的是当鼠标在ToolBar上移动时,因为Flat属性设为true,会引发OnCustomDrawButton事件,在事件句柄中判断鼠标位置,以此改变按钮颜色,即当鼠标移到按钮上时,用红色填充按钮框,移开时用clBtnFace填充.现在的问题是:当鼠标移动时,两种颜色的交替变换时,总会有闪烁,尤其在配置低的机器上,可以看见有一个白色的填充区域一闪而过,也就是说在黄色和灰色变换时,不是直接变换,中间有一个步骤是用白色填充了一次,从而造成闪烁.我试了许多方法,包括响应WM_ERASEBKGND消息都不能解决,好像画刷的背景色始终是白色.各位有何高见,帮我指点指点,不胜感激
GetCursorPos(&P);if(PtInRect(&(Button->BoundsRect),ToolBar->ScreenToClient(P)))
Sender->Canvas->Brush->Color=clRed;
else
Sender->Canvas->Brush->Color=clBtnFace;Sender->Canvas->FillRect(Button->BoundsRect);DefaultDraw=false;大致就是这样子,目的是当鼠标在ToolBar上移动时,因为Flat属性设为true,会引发OnCustomDrawButton事件,在事件句柄中判断鼠标位置,以此改变按钮颜色,即当鼠标移到按钮上时,用红色填充按钮框,移开时用clBtnFace填充.现在的问题是:当鼠标移动时,两种颜色的交替变换时,总会有闪烁,尤其在配置低的机器上,可以看见有一个白色的填充区域一闪而过,也就是说在黄色和灰色变换时,不是直接变换,中间有一个步骤是用白色填充了一次,从而造成闪烁.我试了许多方法,包括响应WM_ERASEBKGND消息都不能解决,好像画刷的背景色始终是白色.各位有何高见,帮我指点指点,不胜感激
解决方案 »
- Borland神话跟Delphi再也无关了。散分,顺便问个工资的问题
- delphi2006 BT下载,注册就可以下了
- 关于汉字的编码问题,看到一些人找了些复杂的算法,现写了个简单的,免费公布如下.(有人重复发贴问啊.)
- 关于treeview的问题,急!!!在线等!只有30分了
- 学了VB有没有必要学delphi啊
- 用query的时候 怎么有错误呢??
- 新手提问:关于Access查询的简单问题!!
- 请教dbgrid录入问题,急!!!
- cxGrid这样的效果是怎么实现的
- 除了编程,还可以做什么呢?
- 请教各位兄弟,我该怎么办?
- 用fastreport打印dbgrideh中用户挑选的记录,如何设置数据源?
self.DoubleBuffered := true;看有没有用