像 Delphi 中的 Windows 资源管理器一样列出列表框中的文件

use*_*787 -1 delphi listbox

我正在列出某个目录中的文件,但列表与 Windows 资源管理器不同,即使我选中了 Sorted。

在 Windows 上按名称列出

在列表框中按名称列出

代码

小智 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)