Topendialog不显示文件扩展名

时间:2012-04-05 09:34:07

标签: delphi delphi-2007

此问题仅发生在以前在Delphi 7下设计并迁移到在WinXP上运行的Delphi 2007的应用程序中。

我试了很久才把这个问题整理好了。

据我所知,Topendialog是一个Win32对话框包装器,它应该继承windows文件夹选项,在我的例子中,它设置为显示所有文件的文件扩展名。

现在,如果我创建一个新的应用程序并在其上删除Topendialog,当它运行时,它会按预期显示文件扩展名。

如果我将同一个对话框拖放到现有应用程序并运行,则它不会显示文件扩展名。

如果我在调用对话框la'Myfile.txt'之前将文件名字符串写入filename属性,当显示对话框时,文件名显示为“Myfile”,扩展名不显示,也不显示列表中的任何文件。

还有其他人有这种行为吗?

有人有任何解决方法吗?

编辑:上传到新项目中的Topendialog与现有项目之间显示差异的图像。

As shown on new project

As shown on existing project

1 个答案:

答案 0 :(得分:3)

好的,我有解决此问题的方法。

事实证明,在正确的位置调用SHGetSettings实际上可以阻止问题的发生。

所以解决方法是在开始时将它放在项目源中。

例如

  程序Blah;

     

用途

     

形式,shlobj,

     

嗒嗒,
  ......等等。

     

{$ R * .TLB}

     

{$ R * .RES}

     

var ShellFlags:TShellFlagState;

     

开始
  SHGetSettings(ShellFlags,SSF_SHOWEXTENSIONS); .....

我不知道为什么这会使它工作,它不应该有任何区别,因为它只是一个查询,但它的工作原理。

所以,感谢Justmade建议API调用。