Есть код
Код:
var
Form1:TForm1;
i:Integer;
FileList: TStringList = nil; // Здесь будут наши данные для виртуального ListView
implementation
{$R *.dfm}
{Получение списка файлов}
procedure FindFiles(LV:TListView;ImgList:TImageList;Path:string);
var
WFD:WIN32_Find_Data;
HFile:THandle;
begin
if not Assigned(FileList) then FileList := TStringList.Create else FileList.Clear;
LV.Items.BeginUpdate;{Начинаем прорисовку}
LV.Items.Clear;{Очистка ListView}
Path:=Path;
HFile:=FindFirstFile(PChar(Path+'*.*'),WFD);{Ищем файлы только в указанном каталоге}
if HFile<>INVALID_HANDLE_VALUE then {Проверяем отсутствие ошибок}
begin
repeat
if StrPas(WFD.cFileName)<>'.' then
with LV.Items.Add do
begin
if (WFD.dwFileAttributes and faDirectory)<>faDirectory then{Проверка что это не папка}
begin
Caption:=ChangeFileExt(WFD.cFileName,'');
SubItems.Add('...');
SubItems.Add('...');{Размер файла}
end else
begin
Caption:=(WFD.cFileName);{Имя папки}
SubItems.Add('[Папка]');{Указываем что это папка}
SubItems.Add('...');{Размер папки}
end;
SubItems.Add('...');
SubItems.Add('...');
end;
application.ProcessMessages; { Чтобы форма не сильно тормозила во время поиска}
until FindNextFile(HFile,WFD)<>True;
Winapi.Windows.FindClose(HFile);
end;
LV.Items.EndUpdate;{Заканчиваем прорисовку файлов}
LV.Items.Count := FileList.Count;
LV.Invalidate; // И на всякий случай обновляем его
end;
procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin
if Assigned(FileList) and (Item.Index < FileList.Count) then
begin
Item.Caption := FileList[Item.Index];
end;
end;
из-за папок с большим количеством файлов решил пользоваться виртуальным ListView но почему то загружается пустой ListView. Причиной почему процедура FindFiles выведена отдельно, потому что требуется вывод не в один ListView, но для каждого нужно сделать чтобы был виртуальный ListView.
OwnerData у ListView = True, но он все равно пуст как быть, подскажите пожалуйста.