gpt4 book ai didi

delphi - 在应用程序负载上显示模态窗体之前确保主窗体最大化并完全重绘的正确方法

转载 作者:行者123 更新时间:2023-12-03 14:38:50 25 4
gpt4 key购买 nike

建议使用什么方法来确保主窗体完全最大化并且在应用程序首次加载时显示模式窗体之前重新绘制所有控件?

我需要在应用程序启动时显示模式对话框(不是登录屏幕),但如果我在屏幕最大化时将表单设置为 wsMaximized,则控件没有机会重绘,并且您留下了一团糟。

我目前使用以下内容显示模式屏幕:

procedure TForm1.FormActivate(Sender: TObject);
var
frmOrderLookup:TfrmOrderLookup;
begin
onactivate := nil;
frmOrderLookup:=TfrmOrderLookup.Create(nil);
try
frmOrderLookup.showmodal;
finally
frmOrderLookup.Free;
end;
end;

最佳答案

我通常所做的是将自定义消息发布回我的表单。这样,在处理完表单的其他消息之前,它不会被处理。处理此消息时,您的表单应该已经完成​​重绘。

type
TMyForm = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure HandleLookupMessage(var Message: TMessage); message WM_USER + 1;
end;

procedure TMyForm.HandleLookupMessage(var Message: TMessage);
var
frmOrderLookup: TfrmOrderLookup;
begin
frmOrderLookup := TfrmOrderLookup.Create(Application);
try
frmOrderLookup.ShowModal;
finally
frmOrderLookup.Release;
end;
end;

procedure TMyForm.FormCreate(Sender: TObject);
begin
// Maximise form here if needed
PostMessage(Handle, WM_USER + 1, 0, 0);
end;

如果您担心消息以某种方式再次到达您的应用程序,您可以随时添加一个私有(private) bool 变量来指示它已被处理过一次。

关于delphi - 在应用程序负载上显示模态窗体之前确保主窗体最大化并完全重绘的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10948096/

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