在我的电脑(Win 7 / DXE),当我运行的代码,对话框看起来是一样的。
解决方法
> TFileOpenDialog包装在Vista中引入的新的基于COM的对话框。因此它只适用于Vista或更高版本。它具有比旧对话框更多的功能,最显着的是与搜索的紧密集成。
Vista常用对话框
兼容性常用对话框
GetOpenFileName API在大多数情况下实际上会产生新的对话框,如果调用正确,那么你实际上不能告诉区别。也就是说,历史上,VCL的GetOpenFileName的包装是不精确地实现的,总是导致显示兼容性对话框。
但是,新的COM对话框提供了什么呢?
新对话框提供了一个更容易的定制界面,失去一些通用性。如果您在Vista或更高版本上使用GetOpenFileName的旧对话框模板定制,则对话框会降级为缺少功能的丑陋兼容性版本。
新对话框的另一个大的优点是能够选择无限数量的文件。旧的GetOpenFileName接口在固定大小的缓冲区中返回多选文件名。这可能是一个真正的限制,在我自己的代码,我不得不破解VCL代码,使这个缓冲区更大,当我的应用程序运行在XP上。
如果可能,TOpenDialog会将工作委派给TFileOpenDialog。它使用的测试要求所有以下内容为真:
>在Windows Vista或更高版本上运行。
> Dialogs.UseLatestCommonDialogs全局布尔变量为true(默认为true)。这允许您禁用使用新的COM对话框,如果你选择这样做。
>未指定对话框模板。
> OnIncludeItem,OnClose和OnShow事件都未分配。大概这些不能被TFileOpenDialog触发。
概要
如果您继续使用TOpenDialog,那么您将在多选模式下获得无限数量的文件的好处。但是,如果您想自定义对话框,并拥有新的对话框而不是丑陋的兼容性对话框,那么您需要执行以下操作:
>在XP上使用TOpenDialog和对话框模板方法。>在Vista和以后使用TFileOpenDialog和实现定制与IFileDialogCustomize。