此问题仅发生在以前在Delphi 7下设计并迁移到在WinXP上运行的Delphi 2007的应用程序中。
我试了很久才把这个问题整理好了。
据我所知,Topendialog是一个Win32对话框包装器,它应该继承windows文件夹选项,在我的例子中,它设置为显示所有文件的文件扩展名。
现在,如果我创建一个新的应用程序并在其上删除Topendialog,当它运行时,它会按预期显示文件扩展名。
如果我将同一个对话框拖放到现有应用程序并运行,则它不会显示文件扩展名。
如果我在调用对话框la'Myfile.txt'之前将文件名字符串写入filename属性,当显示对话框时,文件名显示为“Myfile”,扩展名不显示,也不显示列表中的任何文件。
还有其他人有这种行为吗?
有人有任何解决方法吗?
编辑:上传到新项目中的Topendialog与现有项目之间显示差异的图像。
答案 0 :(得分:3)
好的,我有解决此问题的方法。
事实证明,在正确的位置调用SHGetSettings实际上可以阻止问题的发生。
所以解决方法是在开始时将它放在项目源中。
例如
程序Blah;用途
形式,shlobj,
嗒嗒,
......等等。{$ R * .TLB}
{$ R * .RES}
var ShellFlags:TShellFlagState;
开始
SHGetSettings(ShellFlags,SSF_SHOWEXTENSIONS); .....
我不知道为什么这会使它工作,它不应该有任何区别,因为它只是一个查询,但它的工作原理。
所以,感谢Justmade建议API调用。