0

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

当 Project/Options/Application/Runtime Themes 设置为 Enable Runtime Themes 时:

=>

当我打开保存对话框时,窗口会冻结大约一分钟(有时我可以关闭窗口但必须等待大约一分钟才能再次打开对话框(或另一个 TOpenDialog)。显示新的 Vista 风格的保存对话框。

如果我尝试在装有 Windows 7 的 PC 上运行此 exe,该应用程序会在启动时挂起(我也尝试过使用 XP 兼容模式但没有成功)。

当 Project/Options/Application/Runtime Themes 设置为 none 时:

=>

保存对话框运行良好(快速),但显示了旧样式对话框,参见下面的示例:

旧样式对话框示例

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

附言。我在 Win 7 PC 上使用 D2009 编译的旧 exe 文件在 Win 7 和 8 PC:s 上运行良好,并且使用新的 Vista 对话框样式正确显示对话框。

可能是 Win 8/7 中的某些权限导致了这种情况吗?我使用 IDE FIX PACK 5.4,

谢谢,托马斯

4

1 回答 1

0

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

复制如下(XE2):

  1. 创建一个新的 VCL 表单应用程序
  2. 在窗体上放置一个 TSaveDialog1
  3. 放置一个带有 OnClick 事件的 Tbutton

`

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

`

4:打开项目源文件,放入以下行:

//{$MAXSTACKSIZE $3500000} //这是一个十进制值 5 5574 528 OK!

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

运行并单击按钮。提供一个虚拟文件名,然后按保存。没发生什么事。继续点击按钮 60 秒。对话终于要结束了。

更改为较小的筹码量 $3500000。现在程序运行良好。感谢所有提示。

于 2013-12-20T10:17:25.753 回答