我正在列出某个目录中的文件,但列表与 Windows 资源管理器不同,即使我选中了 Sorted。
小智 6
您需要使用名为“LogicalCompare”的排序算法对字符串进行自定义排序。成分如下,(我希望我了解如何添加代码......)。另外,这适用于delphi10.3,不知道以前的版本。
uses Winapi.ShLwApi;
function LogicalCompare(List: TStringList; Index1, Index2: integer): integer;
begin
Result := StrCmpLogicalW(PWideChar(List[Index1]), PWideChar(List[Index2]));
end;
Run Code Online (Sandbox Code Playgroud)
对于您的列表框项目,您需要一点杂念,因为项目是 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;
....
Run Code Online (Sandbox Code Playgroud)