gpt4 book ai didi

forms - 如何减少 TForm 上 TImage 的闪烁

转载 作者:行者123 更新时间:2023-12-02 09:24:14 26 4
gpt4 key购买 nike

我有一个包含几个表单的 Delphi 应用程序。对于每个表单,我都使用 TImage 作为背景,以使其具有与标准表单外观不同的外观。 TImage 与客户端对齐。我遇到的问题是,每次单击按钮打开新表单时,表单都会闪烁。我确实使用

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

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

DoubleBuffered := true;
但这似乎并没有解决问题,而且如果我确实使用了 dubbelbuffered 那么它会使我的表单上出现的组框不透明。任何人都可以帮忙吗?

我使用的是Delphi XE2

最佳答案

捕获 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;

关于forms - 如何减少 TForm 上 TImage 的闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22024281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com