【问题标题】:How to create Modal and Modeless forms in borland c++ builder如何在 borland c++ builder 中创建模态和无模态表单
【发布时间】:2011-01-12 06:31:25
【问题描述】:

我有一个任务是增强一个已经存在的用 Borland c++ 编写的工具,我是编程和 c++ 构建器的新手。任务是将弹出的消息框集成到主窗体本身,我通过向项目中添加一个新窗体并调用它来代替消息框来成功完成。 我已将我的新表单设为模态,以便阻止控制,直到用户选择一个选项。

现在我在项目中添加了另一个名为 graph 的表单来显示图形,并且我希望当用户单击新表单中的按钮时控件转到图形。

有没有办法让两个孩子无模式并只阻止父表单(模态)。简而言之,我想访问我添加到项目中的两个新表单,我不想访问我的主表单,直到我以这两种形式做出所有选择。请帮助!

【问题讨论】:

  • 在 Borland C++ builder 中,有没有办法让子窗体无模式并仅阻止主窗体(模态)?

标签: c++builder vcl


【解决方案1】:

除了使用ShowModal(),您可以将父窗体的Enabled 属性设置为false,使用Show() 来显示两个窗体,然后在两个窗体都已显示时将父窗体的Enabled 属性设置回true关闭。

【讨论】:

  • 但这不会阻止父窗体运行仪式?我们如何让父窗体等待而不显示对话框?
  • 父窗体仍将处理消息(计时器、绘画等),但在禁用时用户将无法与其交互。此外,如果您使用的是旧版本的 C++Builder,您可能必须覆盖辅助窗体的 CreateParams() 方法以将父窗体指定为父 HWND(从 Win32 API 的角度来看,而不是 VCL 的)所以这些窗口不能消失在父窗体的窗口后面(默认使用TApplication 窗口作为父 HWND,这允许 TForm 窗口相互更改 z 顺序)...
  • ...在较新的版本中,TFormTApplication 具有新的 PopupModePopupParent 属性,现在可以更好地控制该问题。意思是,您可以将第二个表单的PopupParent 属性设置为父表单,然后它们将永远无法落后。
  • 感谢有关 PopupParent 的信息,我一直在努力解决窗口显示在它们应该在前面的其他窗口后面的问题(尤其是当后窗口是模态的,而前面一个不能移动,因为后面一个是模态的,它被锁定了!)
【解决方案2】:

您可以从OnCreate() 方法中移动您不想在create 期间自动运行的功能。您可以将它们移动到例如OnClick()。我遇到了类似的情况,Show() 方法在程序 create 期间运行。我实现了OnActivate() 方法并从那里调用Show() 方法,而不是从OnCreate()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-19
    • 2019-12-09
    • 1970-01-01
    • 2018-02-28
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多