doublebuffered的问题

huangjacky huangjacky 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
之前我写的控件有闪烁的问题,然后在构造函数里面使用

if not self.doubleBuffered then
self.doubleBuffered:=true

解决了一些问题,现在有个新问题
就是我控件里面有个变量,比如说
private
...
FPanel :TPanel;

然后控件的构造函数中,我也写了
..
FPanel:=Tpanel.Create(self);
if not Fpanel.doublebuffered then
Fpanel.doubleBuffered:=true;
..
结果pannel还是闪个不停,晕了,我看了先资料,是C#的

如果你在Form中绘图的话,不论是不是采用的双缓存,都会看到图片在更新的时候都会不断地闪烁,解决方法就是在这个窗体的构造函数中增加以下三行代码:


请在构造函数里面底下加上如下几行:
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲

参数说明:

UserPaint
如果为 true,控件将自行绘制,而不是通过操作系统来绘制。此样式仅适用于派生自 Control 的类。

AllPaintingInWmPaint
如果为 true,控件将忽略 WM_ERASEBKGND 窗口消息以减少闪烁。仅当 UserPaint 位设置为 true 时,才应当应用该样式。

DoubleBuffer
如果为 true,则绘制在缓冲区中进行,完成后将结果输出到屏幕上。双重缓冲区可防止由控件重绘引起的闪烁。要完全启用双重缓冲,还必须将 UserPaint 和 AllPaintingInWmPaint 样式位设置为 true。


参考资料:
如何解决CSharp中动画闪烁问题?
http://search.csdn.net/Expert/topic/1488/1488888.xml
C#中双缓存绘图的实现方法。
http://blog.joycode.com/ghj/archive/2004/01/03/10543.aspx

以上你不是在窗体上绘图,需要你自己写一个控件,在这个控件的构造函数上增加上上述三行代码

我想问delphi中怎么办。我已经用了双缓冲了,可是还是闪烁。
各位有没有好的办法???
...全文
评论 8
收藏 已收藏
分享
返回顶部
huangjacky
Delphi 5,944 成员 262,941 内容