Показать сообщение отдельно
  #5  
Старый 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;
Ответить с цитированием