【问题标题】:Setting filename property for TOpenFileDialog为 OpenFileDialog 设置文件名属性
【发布时间】:2013-03-12 18:24:30
【问题描述】:

当我设置 TFileOpenDialog 的 Filename 属性然后执行它时,我只看到在 Filename 字段中选择的文件名的最后 14 个字符。如果我按 Home 我可以看到整个字符串都在那里,但我当然希望它能够正确显示。我已经在两台 Windows 7 和一台 Windows 8 机器上进行了测试,结果相同。有没有人对如何解决这个问题有任何建议或提示?

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

初始显示显示问题:

按 Home 后的整个字符串:

【问题讨论】:

标签: delphi delphi-xe2


【解决方案1】:

TFileOpenDialog 只是 Windows Vista 及更高版本上 Microsoft 的 IFileDialog 接口的一个薄包装器。您无法控制对话框本身在显示时的行为方式。如果它只显示最后一个字符(并且我能够在我的 Win7 机器上重现该行为),那么这就是对话框的一般工作方式。然而,话虽如此,IFileDialog 确实允许单独设置绝对文件夹路径和文件名,这就是它们应该被使用的方式,但不幸的是,TFileOpenDialog 并没有进行或公开这种分离(Embarcadero 错误? )。因此,如果您需要该功能,则必须直接使用IFileDialog,而根本不使用TFileOpenDialog

【讨论】:

  • 您可以从TFileOpenDialog 获取IFileDialog。无需完全放弃。
  • 答案的第二部分是关于什么的?当然,Delphi 包装器提供了文件的完整路径,但是当您设置它时,它会导致对文件夹的更改和对文件的更改。我看不出这是如何解决这个问题的。一个简单的“这是一个没有解决方法的已知问题”就足够了。
  • @DavidHeffernan: TFileOpenDialog 在调用Execute() 之前不会创建其IFileDialog 实例,此时更改TFileOpenDialog 属性的分配方式为时已晚,除非您从 TFileOpenDialog 派生并用您自己的实现覆盖 Execute()
  • @DavidHeffernan:整个FileName 属性值按原样传递给IFileDialog.SetFileName() 方法,该方法在对话框的编辑框中按原样显示整个字符串。我得到的是TFileOpenDialog 没有将文件夹路径与文件名分开,因此它可以单独调用IFileDialog.SetFolder('C:\Program Files (x86)\Embarcadero\RAD Studio\9.0\')IFileDialog.SetFileName('available_downloads_en.htm')。如果它这样做,那可能已经解决了问题。
  • 好的,感谢您的澄清。 FWIW,我直接用IFileDialog!!
猜你喜欢
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 2018-09-02
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多