2009-12-08 69 views
0

我的应用程序似乎没有接收或处理相同的Windows消息级联,在特定的Windows版本上平铺水平/平铺垂直。德尔福SDI应用程序 - 不垂直处理级联/平铺水平和平铺?

的Windows XP X32 - 不工作
的Windows XP 64位 - 未测试
的Windows Vista的X32 - 不工作
于Windows Vista x64 - 正常工作?
的Windows 7 X32 - 未测试
Windows 7的64 - 不工作

任何人任何想法是,为什么这可能是这种情况?有什么特定于Vista的x64不与其他人,我不会这么想我自己!

更新

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

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

+0

你如何“陷阱”这些消息?也许它可以帮助 – Pmax 2009-12-08 20:00:52

+0

我不会陷入困境,我认为这是处理这个问题的操作系统? – James 2009-12-08 20:31:16

+0

我从来不知道你能做到这一点!对于它的价值,我只是用WinXP-32下的Delphi 2006应用程序来试用它,你是对的。它不起作用。 – 2009-12-09 09:15:40

回答

1

如果你谈论的是德尔福的TForm.Cascade和TForm.Tile方法,从文件(Delphi 7中,因为它是方便):

 
Use Cascade to arrange MDI child forms so they overlap. 

Cascade works only if the form is an MDI parent form (that is, if the form’s 
FormStyle property is fsMDIForm). 

正如你所看到的,他们只是设计为MDI儿童表格;他们对非MDI儿童形式没有影响。这也许可以解释为什么他们不在你测试过的四个操作系统中的三个上工作。 (我怀疑Vista的x64工作是一种侥幸)。

编辑:基于评论,问题是不相关的TForm.Cascade /瓷砖。

我认为克雷格杨是在正确的轨道,但。您是否尝试过向.DPR文件添加

Application.ShowMainFormOnTaskbar := True; 

?我认为这个问题可能是,在早期版本的Delphi中启动的项目,然后更新到更新的版本,标志没有设置,应用程序的窗口是什么放在任务栏上。将其更改为主窗体可能会解决问题。

+0

我指的是当您在任务栏上右键单击应用程序并从菜单中选择这些选项时。无论使用哪种类型的应用程序,我都会通过它。 – James 2009-12-08 21:24:32

+0

啊,好的。这句话像TForm.Cascade一样给我读了。查看更新的答案。 – 2009-12-09 13:28:57

+0

我已经在主要问题的评论中提到这已经完成了。我认为这不是问题所在。我注意到我们会捕获WM_MOVING消息,但当Cascade/Tile选项被选中时,它似乎不会被调用。 – James 2009-12-09 13:39:25

0

一个简单的Delphi应用程序有两个'主'手柄。一个用于主窗体,另一个用于TApplication实例。

就我个人而言,我不使用功能在桌面上平铺或级联应用程序(我更喜欢将事物最大化运行)。因此,我从来没有打扰过这种行为。但我可以给出一些建议:

  • 最有可能的TApplication.WndProc方法正在接收消息,但它无助于尝试调整它。
  • 我建议你截取相关消息,并简单地将它们传递给主窗体的句柄。
    • TApplication.OnMessage事件是最简单的,应该就够了。
    • 如果没有,可以尝试使用TApplication.HookMainWindow();