2013-03-12 46 views
6

當我設置TFileOpenDialog的Filename屬性,然後執行它時,我只看到在Filename字段中選擇的文件名的最後14個字符。如果我按主頁我可以看到整個字符串在那裏,但我希望它能夠正確顯示。我已經在兩臺Windows 7和一臺Windows 8機器上測試了相同的結果。有沒有人有任何建議或提示如何解決這個問題?爲TOpenFileDialog設置filename屬性

FileOpenDialog1.FileName := 
    'C:\Program Files (x86)\Embarcadero\RAD Studio\9.0\available_downloads_en.htm'; 
if FileOpenDialog1.Execute then 
    ShowMessage(FileOpenDialog1.FileName); 

初步顯示出的問題: Image showing problem

按下主頁後,整個字符串: How I think it should look

+3

這是一個IFileDialog的錯誤,它似乎是在Windows 7中引入的,請閱讀http://social.msdn.microsoft.com/Forums/en-US/windowsuidevelopment/thread/c0c79498-3399-4346-b514 -b15336cd7c68/ – RRUZ 2013-03-12 20:33:15

+2

是的,這是衆所周知的。 – 2013-03-12 20:40:36

回答

7

TFileOpenDialog僅僅是圍繞微軟的Windows Vista和更高IFileDialog接口薄薄的包裝。您無法控制對話本身在顯示時的行爲方式。如果它只顯示最後的字符(並且我能夠在我的Win7框中重現該行爲),那麼對話框的工作原理就簡單了。然而,據說,IFileDialog確實允許絕對文件夾路徑和文件名分開設置,這就是它們應該如何使用,但TFileOpenDialog不會公開或分離,不幸的是(Embarcadero bug?)。所以如果你需要這個功能,你將不得不直接使用IFileDialog而不是使用TFileOpenDialog

+0

你可以從'TFileOpenDialog'獲得'IFileDialog'。沒有必要完全放棄它。 – 2013-03-12 20:58:00

+1

答案的第二部分是什麼? Delphi包裝器確實提供了文件的完整路徑,但是當你設置它時會導致文件夾的改變和文件的改變。我看不出這是如何解決這個問題的。一個簡單的,「這是一個沒有解決方法的已知問題」就足夠了。 – 2013-03-12 21:15:16

+0

@DavidHeffernan:'TFileOpenDialog'不會創建它的'IFileDialog'實例,直到調用Execute(),此時改變'TFileOpenDialog'屬性賦值的時間爲時已晚,除非你從'TFileOpenDialog '並用你自己的實現覆蓋'Execute()'。 – 2013-03-12 21:21:40