09.05.2014, 13:38
|
Заблокирован
|
|
Регистрация: 07.05.2014
Сообщения: 11
Версия Delphi: 7, Kylix
Репутация: -1385
|
|
Цитата:
Сообщение от HTTqp
Меня интересует именно виртуальный listview, я не понимаю как его заполнять(
|
С FindFirst/FindNext я никогда не работал, т.к. предпочитаю вызывать API напрямую. Вот код для поиска файлов на api:
Код:
procedure FindFiles(path:string; mask:array of string);
var
WD:win32_find_data;
hfile:thandle;
ext:string;
fname:string;
begin
path:=includetrailingpathdelimiter(path); // добавляем к пути завершающий слэш, если он отсутствует.
hfile:=findfirstfile(pchar(path+'*.*'),wd); // ищем все файлы, какие только есть в этой папке.
if hfile <> invalid_handle_value then
begin
repeat
fname:=strpas(wd.cFileName);
if (fname <> '.') and (fname <> '..') then
begin
fname:=path+fname;
ext:=extractfileext(fname);
if ansimatchstr(ext,mask)=true then { Это для того, чтобы была возможность искать файлы по нескольким маскам.
Если Вы хотите искать ВСЕ файлы, закомментируйте или удалите эту строку.}
{ ага, попался подходящий файл. Имя файла у нас будет присвоено переменной fname.
Вместо "form1.memo1.lines.add(fname)" напишите свой обработчик}
// form1.Memo1.Lines.Add(fname);
*************************************
with listview1.items.add do
caption:=fname;
*************************************
end;
application.ProcessMessages; { Чтобы форма не сильно тормозила во время поиска.
(лучше вынести в отдельный поток, но сейчас не тот случай).}
until findnextfile(hfile,wd) <> true;
windows.FindClose(hfile);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
arr:array of string;
begin
// Пример 1. Ищем только файлы с расширением *.exe
SetLength(arr, 1);
arr[0]:='.exe';
findfiles('C:\',arr);
// пример 2. ищем файлы с расширением *.exe, *.scr, *.com...
SetLength(Arr, 3);
arr[0]:='.exe';
arr[1]:='.scr';
arr[2]:='.com';
findfiles('C:\',arr);
end;
|