delphi – 使用ModalResult退出一个表单

前端之家收集整理的这篇文章主要介绍了delphi – 使用ModalResult退出一个表单前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一堆表单,我想自动化他们,以便他们自己打开和关闭.

我知道如何让他们打开(通过使用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

原文链接:https://www.f2er.com/delphi/102644.html

猜你在找的Delphi相关文章