本帖最后由 爱飞的猫 于 2024-3-11 01:54 编辑
因为你没有提供最小复现的项目代码,我也不懂 Delphi 的 IDE。
你文中提到的 AlphaSkins 是控件皮肤库,和 Delphi 本身没啥关系。本身应继承自 TShellList 控件。
网上晃悠了一圈,发现 Lazarus 使用的 Free Pascal 自带了这个 TShellList 控件而且不用额外配置,所以我就用它了。
(1) 第一种方法是利用 FileUtil.FindAllFiles 来进行过滤,但 Delphi 好像没这个东西:
procedure TForm1.BtnFilterClick(Sender: TObject);
var
i: Integer;
ListOfFiles: TStringList;
begin
ListOfFiles := TStringList.Create;
FileUtil.FindAllFiles(ListOfFiles, Dir_Input.Directory, Edit_Filter.Text, False, faAnyFile);
shellListView.Clear;
for i := 0 to ListOfFiles.Count - 1 do
begin
shellListView.AddItem(ExtractFileName(ListOfFiles[i]), TStringWrapper.Create(ListOfFiles[i]));
end;
end;
(2) 第二种方法则是用 System.SysUtils 中的 FindFirst /FindNext /FindClose 来查找信息:
procedure TForm1.BtnFilter2Click(Sender: TObject);
var
SearchRecord: TSearchRec;
FilePath: String;
begin
shellListView.Clear;
if FindFirst(Dir_Input.Directory + DirectorySeparator + Edit_Filter.Text, faAnyFile, SearchRecord) = 0 then
begin
repeat
if (SearchRecord.Attr and faDirectory) <> 0 then continue;
FilePath := Dir_Input.Directory + DirectorySeparator + SearchRecord.Name;
shellListView.AddItem(SearchRecord.Name, TStringWrapper.Create(FilePath));
until FindNext(SearchRecord) <> 0;
FindClose(SearchRecord);
end;
end;
实测效果如下:
完整项目代码(使用 Lazarus IDE 编译)和编译后的文件:52pj-tid-1898934-Pascal文件过滤.7z
|