0

我的应用程序似乎没有接收或处理特定 Windows 版本上的 Cascade、Tile Horizo​​ntal/Tile Vertical 的相同 Windows 消息。

Windows XP x32 - 不工作
Windows XP x64 - 未测试
Windows Vista x32 - 不工作
Windows Vista x64 -工作正常?
Windows 7 x32 - 未测试
Windows 7 x64 - 不工作

有人知道为什么会这样吗?有没有什么特定于 Vista x64 的东西与其他人不一样,我自己也不会这么想!

更新

更具体地说,我指的是当我打开一个或多个应用程序实例时,我按住 Ctrl 并从任务栏中选择这些实例,然后尝试级联/平铺。

在升级到 Delphi 2009 之前,我们的应用程序的旧版本似乎可以按预期工作。与此不同的是我们现在使用的是 DevExpress 功能区组件。更令人沮丧的是,我们有另一个版本的应用程序,它在 Delphi 2009 中并使用功能区,效果很好!

4

2 回答 2

1

如果您正在谈论文档中的 Delphi 的 TForm.Cascade 和 TForm.Tile 方法(Delphi 7,因为它很方便):

使用 Cascade 排列 MDI 子窗体,使它们重叠。

Cascade 仅在窗体是 MDI 父窗体时才起作用(即,如果窗体的
FormStyle 属性为 fsMDIForm)。

如您所见,它们只是为 MDI 子窗体设计的;它们对非 MDI 子窗体没有影响。这也许可以解释为什么他们不能在您测试过的四个操作系统中的三个上工作。(我怀疑 Vista x64 的工作是某种侥幸。)

编辑:根据评论,问题与 TForm.Cascade/Tile 无关。

不过,我认为 Craig Young 是在正确的轨道上。您是否尝试过添加

Application.ShowMainFormOnTaskbar := True;

到.DPR 文件?我认为问题可能在于,在早期版本的 Delphi 中启动然后更新到较新版本的项目中,未设置标志并且应用程序的窗口是放在任务栏上的。将其更改为主表单可能会解决此问题。

于 2009-12-08T20:39:40.567 回答
0

一个简单的 Delphi 应用程序有两个“主要”句柄。一个用于主窗体,另一个用于 TApplication 实例。

就我个人而言,我不使用该功能在桌面上平铺或级联应用程序(我更喜欢最大限度地运行事物)。因此,我从来没有费心去挖掘这种行为。但我可以给出一些指示:

  • TApplication.WndProc 方法很可能正在接收消息,但尝试调整它的大小并没有帮助。
  • 我建议您拦截相关消息并将它们简单地传递给主窗体的句柄。
    • TApplication.OnMessage 事件是最简单的,应该足够了。
    • 如果没有,您可以尝试使用 TApplication.HookMainWindow();
于 2009-12-09T12:51:43.910 回答