Adr*_*son 5 delphi winapi windows-shell
我正在与Vcl.FileCtrl功能一个很奇怪的问题SelectDirectory (这是周围的瘦包装的SHBrowseForFolder的Win32 API).
我正在使用以下代码来允许用户浏览文件或文件夹:
if SelectDirectory('Sélectionnez un élément à ajouter :', '', S, [sdNewFolder,
sdShowFiles, sdNewUI]) then
Run Code Online (Sandbox Code Playgroud)
执行此代码时,会正确显示"浏览文件夹"对话框,显示用户桌面的内容:

但是当桌面文件夹中的项目数量过大时(在我的计算机上,我可以通过大约100个桌面图标重现问题),同一个调用会产生完全不同的显示:

在这种情况下,桌面项目不再显示.我只允许浏览我的主文件夹,因为我丢失了"我的电脑"图标,我无法选择此目录之外的文件/文件夹.
我正在寻找我在这里失踪的东西.根项目对于正确显示的子项目数量是否有限制?拥有大量桌面图标通常不是一个好习惯,但据我所知,不应该阻止此对话框正常运行.我不确定Delphi包装器中是否有什么问题,或者这是我在MSDN上没有看到的API的限制......
任何暗示赞赏!
是的,我可以重现这种行为.这显然是一个Windows限制,所讨论的API并没有为您提供任何增加缓冲区的方法.我认为你使用它的机会SHBrowseForFolder几乎为零.因为SHBrowseForFolder现在是一个传统的API.
如果您正在浏览文件夹,则应使用IFileOpenDialog文件夹选择模式.这是一个使用新Vista对话框的更好的对话框.在被包裹的Delphi中TFileOpenDialog.只有使用它,如果Win32MajorVersion>=6!对于XP,您需要重新打电话SHBrowseForFolder.
if Win32MajorVersion>=6 then
begin
FileOpenDialog1.Title := 'Sélectionnez un élément à ajouter :';
FileOpenDialog1.Options := FileOpenDialog1.Options + [fdoPickFolders];
if FileOpenDialog1.Execute then
Beep;
end else
begin
// revert to SelectDirectory
end;
Run Code Online (Sandbox Code Playgroud)
我找到的解决方法是使用“旧”(Win XP) UI,这可以通过不指定标志来完成[sdNewUI]。在这种情况下,所有项目都会正确显示。
当用户必须选择文件或文件夹时,这似乎是唯一有效的解决方案,而某些东西TFileOpenDialog是无法做到的。
| 归档时间: |
|
| 查看次数: |
2044 次 |
| 最近记录: |