我在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主题设置为none:
时=>
“保存”对话框运行良好(快速),但会显示旧样式对话框,如下所示:
这个exe在使用Windows 7的PC上运行良好(虽然使用旧式对话框)。
聚苯乙烯。我在Win 7 PC上使用D2009编译的旧exe文件在Win 7和8 PC上运行良好,并且使用新的Vista对话框样式正确显示对话框。
这可能是Win 8/7中的某些权限导致此问题吗?我使用IDE FIX PACK 5.4,
谢谢, 托马斯
答案 0 :(得分:0)
我发现了问题所在。我使用{$ MAXSTACKSIZE $ 4000000}这会导致保存对话框冻结大约一分钟。 这个庞大的堆栈大小的原因是我使用递归算法(我现在可能需要重新制作)。
重现如下(XE2):
`
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。现在该计划运作良好。感谢所有提示。