【问题标题】:Delphi MDI Child forms and MainMenuDelphi MDI 子窗体和 MainMenu
【发布时间】:2015-04-01 09:47:07
【问题描述】:

我们正在将 Delphi 5 应用程序升级到 Delphi XE7。该应用程序有许多 MDIChild (FormStyle fsMDIChild) 表单,它们使用 WindowState wsNormal 打开。当我打开其中一个窗体并再次关闭它时,主窗体 (FormStyle fsMDIForm) 上的主菜单 (TMainMenu) 会向右对齐并且永远不会再返回。如果我在关闭之前调整 MDIChild 表单的大小(例如单击“正常”或“最小化”图标),则不会发生这种情况。

这在 Delphi 5 版本中不会发生,因此我假设 XE 7 的处理方式有所不同。

其他人以前经历过这种情况吗?如果是这样,您是如何解决的?

更新:

我已经成功复制了这个问题:

  1. 创建一个新的 VCL 应用
  2. 制作主窗体(MainForm)formStyle MDIForm
  3. 为带有菜单项的 MainForm 创建 MainMenu
  4. 创建第二个表单 (ChildForm)
  5. 使 ChildForm formStyle MDIChild
  6. 使用菜单项为 ChildForm 创建 MainMenu
  7. 重要提示(这就是问题所在):仅为 ChildForm BorderIcons 选择 biSystemMenu 和 biMaximise
  8. 在 MainForm 上创建并显示 ChildForm 的按钮
  9. 运行应用程序
  10. 点击按钮
  11. 最大化子表单
  12. 关闭 ChildForm(必须最大化,否则不会发生故障)
  13. 观察 MainForm 的菜单现在与左侧不可点击的“Minimise”图标右对齐如果将 biMinimise 添加到 ChildForm 的 BorderIcons,问题就会消失。

我很确定这是一个错误。如果我错了,请纠正我。

谢谢 J

【问题讨论】:

    标签: delphi menu delphi-xe7 mdichild windowstate


    【解决方案1】:

    在创建全新项目并以您描述的方式创建表单时未观察到您报告的行为。

    很明显,您的项目中有一些代码导致了这个问题。您需要进行一些调试以识别此问题代码。首先剥离代码,直到问题消失。您剥离的最后一个代码应该包含引导您找到问题原因的线索。以这种方式继续,直到您隔离了问题。

    【讨论】:

    • 谢谢大卫,我会做一些实验。我只是觉得 Delphi 5 中的行为不同,但你的解释非常有道理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 2020-10-12
    • 1970-01-01
    相关资源
    最近更新 更多