【问题标题】:Delphi MDI Application Next Window menu itemDelphi MDI Application Next Window 菜单项
【发布时间】:2023-03-11 13:51:01
【问题描述】:

我将如何在 Delphi 7 的 MDI 应用程序的 Windows 菜单中实现 Ctrl+F6 Next Window 操作?

【问题讨论】:

  • Ummm .. 我在回答中就是这样告诉你的。然后,您在原始帖子中添加了“在 Windows 菜单中”。再一次,我已经在我的回答中给你了。我在这里缺少什么吗?

标签: delphi delphi-7 mdi


【解决方案1】:

使用 MDI 父窗口的 Next 和 Previous 方法。您可以从菜单事件中执行此操作,并像任何其他菜单项一样分配快捷方式。在下面的代码中,MDI 父窗体是 TFormMDIParent,它假定您创建了两个标题为“Next Child”和“Previous Child”的菜单项,并将它们的名称设置为 IDE 生成的默认值。它还假定您已将主窗体正确设置为 MDI 父窗体 (FormStyle = fsMDIForm)。

procedure TFormMDIParent.NextChild1Click(Sender: TObject);
begin
  Self.Next;
end;

procedure TFormMDIParent.PreviousChild1Click(Sender: TObject);
begin
  Self.Previous;
end;

【讨论】:

  • 肯你回答工作,虽然下一个和上一个工作的顺序与我认为的下一个和上一个窗口相反。如果我打开 4 个窗口并且我在打开的第 3 个窗口上并执行 Self.Next,我会认为下一个窗口将是第 4 个窗口,但它实际上将焦点放在第 2 个窗口上。与内置 Ctrl+F6/Shift+Ctrl+F6 键的工作方式相同。
  • 嗯...迈克,我从来没有注意到这一点,但我很乐意承认我在 Delphi 2 天后就放弃了 MDI 应用程序。从那时起,它们就被 MS 弃用了,而且我从来没有很喜欢它们。 :-) 我猜 Next/Previous 的解释是 MS 的事情,因为内置的热键也是这样工作的(即使在非 Delphi MDI 应用程序中)。实际上,我认为行为会有所不同。尝试聚焦窗口3,用鼠标点击win 1,点击win 2,然后尝试下一步。你最终会在哪里?
【解决方案2】:

我认为您不需要做任何事情 - 它隐含在 MDI 应用程序中(无论如何都是使用 Delphi 2006 中的新 MDI 应用程序向导创建的)。

它也可以在最初在 Delphi 6 中创建的应用程序中“正常工作”。

【讨论】:

  • 我意识到它可以正常工作,但我们的一些客户不知道 Ctrl+Tab/Ctrl+F6 或 Ctrl+Shift+Tab/Ctrl+Shift+F6 快捷键。我们只是想让它在 Windows 菜单中可用,以帮助他们学习键盘快捷键。
【解决方案3】:

向主窗体发送wm_SysCommand 消息。 wParam 参数使用sc_NextWindowsc_PrevWindow

【讨论】:

  • 不必要的矫枉过正,Rob。 TCustomForm.Next 和 TCustomForm.Previous 完成同样的事情,并将它们分配给菜单项 OnClick 事件(使用您想要的任何快捷方式)是小菜一碟。
  • 不知道这些方法存在。我很失望 wm_SysCommand 文档没有提到 wm_MdiNext 消息,这是 TCustomForm.Next 发送的。有几种方法可以给这只猫剥皮。
  • 有几种方法是正确的,一如既往。 TCustomForm 实际上已经实现了 Next/Previous,因为在此之前甚至 是一个 TCustomForm (Delphi 1),其中表单的基础是 TForm。我怀疑缺乏关于 wm_MdiNext 的文档是因为 MS 在 Delphi 2 和 Win95 时代左右就已经弃用了 MDI。
猜你喜欢
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
相关资源
最近更新 更多