2013-12-17 31 views
0

我在Windows 8上使用Delphi XE2。我将一个D2009应用程序移植到XE2上,突然保存对话框(TSaveDialog)非常慢。保存对话在XE2中挂起

当项目/选项/应用/运行时的主题设置为启用运行时主题:

=>

当我打开保存对话框窗口冻结了大约一分钟(有时候我可以关闭该窗口但必须等待一分钟左右,直到我可以再次打开对话框(或另一个TOpenDialog)。显示新的Vista样式保存对话框。

如果我尝试在带有Windows 7的PC上运行该exe文件,该应用程序挂起一开始(我也尝试用XP兼容模式,但没有成功)。

当项目/选项/应用/运行时的主题设置为none:

=>

保存对话框工作远远低于(快),但显示的旧样式对话框,SE例如:

Example old style dialog

这个exe在Windows 7的PC上运行良好(尽管使用旧式对话框)。

诗篇。在Win 7 PC上使用D2009编译的旧的exe文件在Win 7和8 PC上都能很好地工作,并使用新的Vista对话框样式正确显示对话框。

难道这是Win 8/7中的一些权限造成的吗?我使用IDE FIX PACK 5.4,

感谢, 托马斯

+0

是你的Windows新鲜或任何安装?例如TeamViewer干扰了XE2对话框(但是它导致它们在关闭时没有打开而滞后几秒钟)也许即使是一些具有AMD HydraVision等窗口布局管理功能的视频驱动器也可能会干扰 –

+0

这是发生在发布模式还是调试模式只要? – 2013-12-17 10:03:33

+0

如果您在没有IDE的情况下运行,行为是否会改变? –

回答

0

我发现这个问题是什么。我使用{$ MAXSTACKSIZE $ 4000000},这会导致保存对话框冻结大约一分钟。 这个庞大的堆栈大小的原因是我使用递归算法(我现在可能需要重新制作)。

重现如下(XE2):

  1. 创建一个新的VCL形成应用
  2. 放置一个TSaveDialog1表单上
  3. 地点与OnClick事件一个TButton

`

Begin 
    if SaveDialog1.Execute then  
    MessageDlg('ok', mtInformation,[mbOk], 0); 
end; 

`

4:打开源文件,并把下面的行:

// {$ MAXSTACKSIZE了350万$} //这是5 5574 528 OK十进制值!

{$ MAXSTACKSIZE $ 4000000} //这是一个十进制值6 7108 864不正确!

运行并单击按钮。提供一个虚拟文件名并按下保存。什么都没发生。继续点击按钮60秒。对话将最终结束。

更改为较小的堆栈大小$ 3500000。现在该计划运作良好。感谢您的所有提示。