如何在TForm上减少TImage的闪烁

时间:2014-02-25 19:30:50

标签: forms delphi

我有一些Delphi应用程序,有几种形式。对于每个表单,我使用TImage作为背景,从标准表单外观给出不同的外观。 TImage与客户端保持一致。我遇到的问题是,每次单击按钮打开新表单时,表单都会闪烁。我用

创建表单
frmSomeForm : TmfrSomeForm.create(self);
frmSomeForm.ShowModal;
frmSomeForm.Free;

我尝试在表单的onCreate中使用以下代码

DoubleBuffered := true;

但这似乎并没有解决问题,另外如果我使用dubbelbuffered,那么它使我的表单上出现的组框不透明。谁能请帮忙。

我正在使用Delphi XE2

1 个答案:

答案 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;