加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 具有大量shell项时的SelectDirectory / ShBrowseForFo

发布时间:2020-12-15 09:33:49 所属栏目:大数据 来源:网络整理
导读:我遇到了Vcl.FileCtrl函数SelectDirectory(这是一个围绕ShBrowseForFolder Win32 API的瘦包装器)的一个非常奇怪的问题. 我正在使用以下代码来允许用户浏览文件或文件夹: if SelectDirectory('Sélectionnez un élément à ajouter :','',S,[sdNewFolder,s
我遇到了Vcl.FileCtrl函数SelectDirectory(这是一个围绕ShBrowseForFolder Win32 API的瘦包装器)的一个非常奇怪的问题.

我正在使用以下代码来允许用户浏览文件或文件夹:

if SelectDirectory('Sélectionnez un élément à ajouter :','',S,[sdNewFolder,sdShowFiles,sdNewUI]) then

执行此代码时,会正确显示“浏览文件夹”对话框,显示用户桌面的内容:

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

在这种情况下,桌面项目不再显示.我只允许浏览我的主文件夹,因为我丢失了“我的电脑”图标,我无法选择此目录之外的文件/文件夹.

我正在寻找我在这里失踪的东西.根项目对于正确显示的子项目数量是否有限制?拥有大量桌面图标通常不是一个好习惯,但据我所知,不应该阻止此对话框正常运行.我不确定Delphi包装器中是否有什么问题,或者这是我在MSDN上没有看到的API的限制……

任何暗示赞赏!

解决方法

是的,我可以重现这种行为.这显然是一个Windows限制,所讨论的API并没有为您提供任何增加缓冲区的方法.我认为你使用SHBrowseForFolder解决它的可能性接近于零.因为SHBrowseForFolder现在是一个遗留API.

如果您正在浏览文件夹,则应在文件夹选择模式下使用IFileOpenDialog.这是一个使用新Vista对话框的更好的对话框.在由TFileOpenDialog包装的Delphi中.仅在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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读