首页 > 解决方案 > 在列表框中列出文件,如 Delphi 中的 Windows 资源管理器

问题描述

我列出了某个目录中的文件,但列表与 Windows 资源管理器不同,即使我检查了已排序。

在 Windows 上按名称列出

在列表框中按名称列出

代码

标签: delphilistbox

解决方案


您需要使用称为“LogicalCompare”的排序算法对字符串进行自定义排序。成分如下,(我希望我明白如何添加代码......)。另外,这适用于delphi10.3,不知道以前的版本。

uses Winapi.ShLwApi;
function LogicalCompare(List: TStringList; Index1, Index2: integer): integer;
begin
  Result := StrCmpLogicalW(PWideChar(List[Index1]), PWideChar(List[Index2]));
end;

对于您的列表框项目,您需要一些杂项,因为项目属于 TStrings 类型,而 Customsort 仅适用于 TStringlist。在 FindFirst 等完成后添加以下内容:

...
var sl: TStringlist;
....//Listbox1 items are populated
sl:=TStringlist.create;
try
  sl.assign(Listbox1.items);
  sl.Customsort(LogicalCompare);
  Listbox1.items.assign(sl);
finally
  sl.free;
end;
....

推荐阅读