5

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

我尝试了很长时间来解决这个问题,但没有运气。

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

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

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

如果事实上如果我在调用对话框之前将文件名字符串写入文件名属性a la'Myfile.txt',当显示对话框时,文件名显示为'Myfile',扩展名不会显示,也不会显示任何文件名单。

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

有人有任何解决方法吗?

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

如新项目所示

如现有项目所示

4

1 回答 1

3

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

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

所以解决方法是一开始就把它放在项目源中。

例如

程序废话;

用途

表格,shlobj,

等等
等等

{$R *.TLB}

{$R *.RES}

var ShellFlags:TShellFlagState;

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

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

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

于 2012-04-06T11:31:44.520 回答