我有一些Delphi应用程序,有几种形式。对于每个表单,我使用TImage作为背景,从标准表单外观给出不同的外观。 TImage与客户端保持一致。我遇到的问题是,每次单击按钮打开新表单时,表单都会闪烁。我用
创建表单frmSomeForm : TmfrSomeForm.create(self);
frmSomeForm.ShowModal;
frmSomeForm.Free;
我尝试在表单的onCreate中使用以下代码
DoubleBuffered := true;
但这似乎并没有解决问题,另外如果我使用dubbelbuffered,那么它使我的表单上出现的组框不透明。谁能请帮忙。
我正在使用Delphi XE2
答案 0 :(得分:2)
抓住WM_ERASEBKG消息并使其无效。下面的代码示例应该可行。 Windows在WM_PAINT之前向窗口发出WM_ERASEBKG事件,默认行为是“清除”带有clBtnFace的表单(或clWindow取决于Windows版本和/或主题)。通过使WM_ERAGEBKG什么也不做(在WM_PAINT之前),应该避免闪烁。
type
TForm1 = class(TForm)
private
{ Private declarations }
protected
procedure WMEraseBkgnd(var Message: TWMEraseBkgnd);
message WM_ERASEBKGND;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
Message.Result:=0;
end;