2013-03-12 65 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