2013-12-17 30 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。現在該計劃運作良好。感謝您的所有提示。