delphi – 新的TFileOpenDialog和旧的TOpenDialog有什么区别?

新的TFileOpenDialog和旧的TOpenDialog有什么区别?
在我的电脑(Win 7 / DXE),当我运行的代码,对话框看起来是一样的。

解决方法

> TOpenDialog包装了传统的GetopenFileName。它适用于所有版本的Windows。
> 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。

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...