我通常使用TOpenDialog
的Filter
属性来缩小用户可用文件的范围。我希望进一步通过它们的内容来过滤这些文件。
例如,打开文件对话框只应显示具有“.bin”文件扩展名和其前4个魔术字节为0x7F、0x45、0x4C、0x46(ELF可执行文件)的文件。
该条件不一定总是识别某些可执行格式,还可能包括其他二进制数据。
在Delphi/VCL中是否有标准方法来实现此功能,还是我必须推迟内容检查,直到用户选择了文件?
我通常使用TOpenDialog
的Filter
属性来缩小用户可用文件的范围。我希望进一步通过它们的内容来过滤这些文件。
例如,打开文件对话框只应显示具有“.bin”文件扩展名和其前4个魔术字节为0x7F、0x45、0x4C、0x46(ELF可执行文件)的文件。
该条件不一定总是识别某些可执行格式,还可能包括其他二进制数据。
在Delphi/VCL中是否有标准方法来实现此功能,还是我必须推迟内容检查,直到用户选择了文件?
OnIncludeItem
事件似乎可以做到你需要的功能,但它存在以下问题:
CDN_INCLUDEITEM
通知。该通知由旧版XP公共对话框触发,而现代公共项目对话框则不会触发。因此,使用该事件会将旧版XP公共对话框强制添加到程序中。这在外观上有缺陷。CDN_INCLUDEITEM
对文件没有影响,它只影响非文件系统 shell 对象。根据文档:相关问题:对话框始终包括具有 SFGAO_FILESYSTEM 和 SFGAO_FILESYSANCESTOR 属性的项,无论 CDN_INCLUDEITEM 返回的值如何。