我现在有这样的一个东西
TRPanel = class(TCustomControl)
里面有些东西。
在create 事件里面设置color:=$003F2812然后我在我的窗体Form1的acitveChanged事件中
写了个 RPanel1.repaint;问题就出来了 ,form1的actvie只要不停的变,这个控件就会出现白条。我应经设置了doublebuffered:=true;了
然后想了下是不是背景擦除的问题或者重载paint事件?希望高手指点。指出病根,给出药方。熟路给我讲讲WM_ERASEBKGND,我在网上下了几个代码,什么注释都没有,很生硬。所以希望有人生动有趣地给我讲讲,哈哈。
TRPanel = class(TCustomControl)
里面有些东西。
在create 事件里面设置color:=$003F2812然后我在我的窗体Form1的acitveChanged事件中
写了个 RPanel1.repaint;问题就出来了 ,form1的actvie只要不停的变,这个控件就会出现白条。我应经设置了doublebuffered:=true;了
然后想了下是不是背景擦除的问题或者重载paint事件?希望高手指点。指出病根,给出药方。熟路给我讲讲WM_ERASEBKGND,我在网上下了几个代码,什么注释都没有,很生硬。所以希望有人生动有趣地给我讲讲,哈哈。
解决方案 »
- 在delphi里做折线图 报表设计
- comobox获取系统TT字体
- 请问如何在delphi中调用制作好的chm文件
- 内容比较
- delphi怎么调用vb控件,我加载不进来最好能说详细点
- COMBOBOX+TREEVIEW?
- ERP
- 下面几个是在编写多窗口浏览器时遇到的问题,希望大家帮助解答!
- ?(中卡之战意义不太大,我不想看了)正题:上哪找delphi5的install shileld
- 有用report builder做报表的吗?哪里有report builder 可下载,能转告吗?
- 急!哪位能给段代码?需要带checkbox的部门树,用户多选后点击保存按钮将部门代码保存到数据库
- 请问如何从网页上如何抓取表格中的数据
begin
Message.Result:=1;
end;这样写了后,不像之前那样闪白条了,现在闪的是黑条,没有以前那样刺眼了。不过仔细看还是能看见那个黑条在闪动。
将两次绘图操作并为一次,即可结果闪烁的问题。
所以首先响应WM_ERASEBKGND,直接返回TRUE或者FALSE都可以,不要做多余的动作。
在WM_PAINT的响应函数里面(文档类在OnDraw()里面),先创建一张大小合适的位图和一个兼容的内存DC,将位图选到内存DC里面,将此内存DC刷为背景色,所有绘图操作往它身上砸,砸完以后,用BitBlt一次性画到窗口DC上即可解决闪烁问题。 关键:
尽量减少对窗口DC的操作次数!//-----------------------------------------------------------------------------上面的话不是我说的。解决方法:重载procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;把这句写在类的声明区域 然后ctl+shift+c(别说你没有用过这个组合键)。procedure TRight2BarControl.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
Message.Result:=1;
end; 这样写了,果然有变化,之前面板闪的是白条,现在是黑条了,因为面板是深灰色滴,所以黑条没有那么刺眼。可是不能就这样结束了。 继续分析代码,发现要这个控件重绘的代码是:ffff.repaint;然后继续看repaint方法,结果发现这个没有重载,他直接用的TWinControl的repaint方法procedure TWinControl.Repaint;
begin
Invalidate;
Update;
end; 先屏蔽ffff.repaint;发现果然面板什么事都不敢了,连我们想要他干的他也不干了。 ok,重载他procedure repaint;override; ctrl+shift+c 现在在里面写上我想要的效果,就四边的边缘 绘图,中间区域什么都不弄,好滴,果然不闪了。搞了这么多天终于搞定了。