Цитата:
Сообщение от Alegun
Из кода вообще не видно - похоже что при вызове FindFiles происходит заполнение листвью и файлиста содержимым первого, а на самом деле такое не происходит - задумка аффтара и есть задумка автора, присутствуют непонятки, и есть подозрение, что код нужно немного исправить в этом месте
Код:
...
if (WFD.dwFileAttributes and faDirectory)<>faDirectory then{Проверка что это не папка}
begin
Caption:=ChangeFileExt(WFD.cFileName,'');
FileList.Add(WFD.cFileName);
SubItems.Add('...');
SubItems.Add('...');{Размер файла}
end else
...
|
прошу прощения надо было показать весь пример а не его часть, нет, все равно не то.
Вот полный код как он есть
Код:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls;
type
TForm1 = class(TForm)
ListView1: TListView;
procedure FormCreate(Sender: TObject);
procedure ListView1Data(Sender: TObject; Item: TListItem);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
FileList: TStringList = nil; // Здесь будут наши данные для виртуального ListView
implementation
{$R *.dfm}
{Получение списка файлов и информации о них}
procedure FindFiles(LV:TListView;Path:string);
var
WFD:WIN32_Find_Data;
HFile:THandle;
ExtTemp,Attr:String;
begin
if not Assigned(FileList) then FileList := TStringList.Create else FileList.Clear;
LV.Items.BeginUpdate;{Начинаем прорисовку}
LV.Items.Clear;{Очистка ListView}
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:=(WFD.cFileName);
SubItems.Add(ExtractFileExt(WFD.cFileName));{Выделяем расширение}
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.FormCreate(Sender: TObject);
begin
FindFiles(ListView1,'C:\Windows\');
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;
end.
и исходник если нужно, просто не получается даже по мануалам сделать правильно.