delphi – 使用ModalResult退出一个表单
发布时间:2020-12-15 06:10:31 所属栏目:大数据 来源:网络整理
导读:我有一堆表单,我想自动化他们,以便他们自己打开和关闭. 我知道如何让他们打开(通过使用OnActivate功能),但我无法关闭它们. 所以,例如,我有 procedure TProgressForm.FormActivate(Sender: TObject);begin inherited; if FModItem.IsInQueue then begin RunBt
|
我有一堆表单,我想自动化他们,以便他们自己打开和关闭.
我知道如何让他们打开(通过使用OnActivate功能),但我无法关闭它们. 所以,例如,我有 procedure TProgressForm.FormActivate(Sender: TObject);
begin
inherited;
if FModItem.IsInQueue then
begin
RunBtnClick(Self);
ModalResult := mrOK;
end;
end;
它运行一个功能.函数运行后我想关闭窗口,这是ModalResult应该做的. (我也尝试在RunBtnClick过程的最后添加ModalResult行,但是也没有) 我正在创建这样的形式: ProgForm := TProgressForm.Create(Self,FModItem);
Self.Visible := False;
try
if ProgForm.ShowModal = mrOK then
begin
Left := ProgForm.Left;
Top := ProgForm.Top;
end;
我已经能够创建按钮来关闭窗体,只需将mrOK添加到对象检查器中的模态结果,但是我似乎无法明确地这样做 谁能看到为什么它不工作? 谢谢 解决方法
不工作的原因是VCL在TCustomForm.ShowModal中显示窗体后,将ModalResult积极设置为0,但在开始检查对ModalResult的更改之前.所以在OnActivate和OnShow中,你要早点.
解决方案是延迟通知.这可以由PostMessage完成,如下所示: const
UM_ACTIVATED = WM_USER + 1;
type
TProgressForm = class(TForm)
procedure FormActivate(Sender: TObject);
private
procedure UMActivated(var Message: TMessage); message UM_ACTIVATED;
end;
...
procedure TProgressForm.FormActivate(Sender: TObject);
begin
PostMessage(Handle,UM_ACTIVATED,0);
end;
procedure TProgressForm.UMActivated(var Message: TMessage);
begin
{ Your code here }
ModalResult := mrOk;
end;
资料来源:NLDelphi (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
