procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered := True; //for Delphi6.0
end;
begin
DoubleBuffered := True; //for Delphi6.0
end;
解决方案 »
- delphi 新学,ADOQuery 未发现字段
- 使用 1stclass4000 按钮 控件出现的问题, 进来看看。
- 100分求『快速』从数据库中取出N条记录的某个字段内容到combobox的items的方法,
- 请问能否在一个线程里多次创建另一个线程呢?
- 100分求解答:怎么在局域网里自动软件升级,就像internet上的金山毒霸升级一样.
- delphi直接连MSSQL问题!
- 求助:idhttp如何获取动态生成的验证码地址
- 老问题重提:怎样编写服务器应用程序,让客户端能够访问服务器的数据库呢?
- 请教,我想改变屏幕上部分区域的颜色,怎么改?【等候中】
- ACCESS数据库的问题?
- table控键可以只插入,一条记录的部分字段吗!
- 创建临时表出错了,请高手帮助!!
--------------------------------
如果构件的 ComponentStyle 属性没有包含 csOpaque 旗帜的话,调用 Invalidate方法时
会导致构件的背景先被擦掉再重绘。如果你在 Paint 方法中绘制背景,那你应该在构件的建构函式中加上:
ComponentStyle := ComponentStyle + [csOpaque];
Max Nilson的回答:
引起闪动另一个原因可能是 WM_ERASEBKGND 讯息的处理。当 VCL 控制项收到一个 WM_ERASEBKGND
讯息时,它会将构件的背景擦掉然後配置成预设的颜色。如果你的元件衍生自
TWinControl,而且构件的颜色与背景颜色不同(例如图形),每次重画以前都会将构件先清成背景颜色再重绘,这就是造成闪动的原因了!
解决的方法不难,你必须告诉 Windows 你要自行解决『所有的』绘图动作。不过有一个前提是,你一定要确定你的 Paint
方法将整个构件都画过,如果你漏了什麽地方忘了画,那个节的数据会由乱数组成,你能想见这情况吗?使用这个方法可以加速你的构件绘制动作(稍微快一点点),因为少了一个填满背景颜色的动作。
type
TMyComponent = class (TWinControl)
...
protected
procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message
WM_ERASEBKGND;
...
end;
procedure TBMyComponent.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
// 不要重绘背景,这会造成构件闪动
Message.Result := 0
end;