delphi - 在主窗体的 OnShow 中显示模态窗体时,主窗体不显示?

标签 delphi modal-dialog tform

我创建了一个应用程序,其中主窗体在主窗体的 FormShow 事件上调用子窗体。显示子表单并提供两个选项可供选择。如果选择子表单上的第一个选项,则会显示一条消息,然后将显示主表单。现在,当应用程序第一次运行时,在子表单上选择选项后将显示 Meassage。但我想以主窗体作为背景显示消息。所以任何解决方案。下面是 FormShow 代码。

Procedure TMainForm.FormShow(Sender:TObject);
begin
  if (SubForm.ShowModal = mrOK) and bOption1 then
  begin
    ShowMessage('Enter the value');
  end;
end;

最佳答案

如果我理解正确,那么您的问题是,当消息框显示时,您的主窗体仍然不可见。

如果是这种情况,那么您有两个选择:

  1. 不要在主表单的 OnShow 事件中显示您的 SubForm,而是稍后显示
  2. 不要在 ShowModal 返回后立即显示消息,而是稍后显示

对于第 2 点,您可以使用我建议的类似方法 here ,使用PostMessage。所以你的代码看起来像这样:

procedure TMainForm.FormShow(Sender:TObject);
begin
  if (SubForm.ShowModal = mrOK) and bOption1 then
  begin
    PostMessage(Self.Handle, WM_SHOWMYDIALOG, 0, 0);
  end;
end;

WM_SHOWMYDIALOG 的处理程序随后显示实际消息。此方法也适用于第 1 点,请参阅 ain's answer .

PostMessage将一条消息发布到应用程序的消息队列,该消息将在主窗体变得可见后进行处理。

关于delphi - 在主窗体的 OnShow 中显示模态窗体时,主窗体不显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7094873/

相关文章:

c++ - 64位内存分配

ios - 关闭模态呈现的 View 使标签栏 Controller (某种)重置

javascript - 仅使用 CSS 关闭模式

Delphi 窗体以自定义构造函数作为主窗体?

json - ObjectToJsonString 将第一个字母大写

delphi - 如何在Builder XE6的运行时动态添加组件?

Delphi XE2 和 LiveBindings 控件之间

javascript - 使用bootstrap 3.x modal的Django用户登录的Ajax问题

delphi - 在 TForm 的 OnClose 事件中释放对象

delphi - 在 delphi TForm 类中仅出现 'public' 错误