Topendialog不显示文件扩展名

And*_*y k 5 delphi delphi-2007

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

我试了好几年才把这个问题整理好,没有运气.

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

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

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

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

有没有其他人看起来这种行为?

有人有任何变通方法吗?

编辑:图像上传到新项目和现有项目之间的Topendialog之间的差异.

如新项目所示

如现有项目所示

And*_*y k 3

好的,我有一个解决这个问题的方法。

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

因此,解决方法是在一开始就将其放入项目源中。

例如

节目废话;

用途

表格,shlobj,

等等

{$R *.TLB}

{$R *.RES}

var ShellFlags:TShellFlagState;

开始
SHGetSettings(ShellFlags,SSF_SHOWEXTENSIONS); ……

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

因此,感谢 Justmade 建议进行 API 调用。