|
Вопрос # 1 329/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Как подсчитать сколько папок и файлов в ListView.
Как это сделано в не которых FTP Client.
 |
Вопрос задал: Vit2 (статус: Посетитель)
Вопрос отправлен: 11 февраля 2008, 09:36
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: min@y™
Насколько я понял...
Общее число айтемов: ListView.Items.Count.
Если ты отображаешь их как файлы и папки, то у каждого TListItem должен быть признак, к какой категории он относится: к папкам или файлам.
Допустим, ты используешь для этого свойство TListItem.Data, если Item - папка, то это свйоство равно Pointer(1), если файл, то Pointer(2). Тогда для подсчёта количества файлов и папок можно написать такой цикл:
var
Index, Files, Folders: Integer;
begin
Files:= 0;
Folders:= 0;
for Index:= 0 to ListView.Items.Count - 1 do
case Integer(ListView.Items[Index].Data) of
1: Inc(Folders);
2: Inc(Files);
end; //case
ShowMessage('Файлов: ' + IntToStr(Files) + ', папок: ' + IntToStr(Folders) + '.');
end;
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 11 февраля 2008, 10:05
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 11 февраля 2008, 12:30; участников в обсуждении: 1.
|
Vit2 (статус: Посетитель), 11 февраля 2008, 12:30 [#1]:
В таком виде:
procedure TForm1.FTPTextDataLine(Sender: TObject; const TextLine: String);
var
List:TListItem;
x:string;
F: TSBFTPFileInfo;
Index, Files, Folders: Integer;
begin
try
Files:= 0;
Folders:= 0;
FTP.ParseFileListEntry(TextLine,F);
x:= Copy(TextLine,0,9);
List:=LView.Items.Add;
List.Caption:= F.FileName;
List.SubItems.Add(BytesToStr(F.FileSize));
List.SubItems.Add(DateTimeToStr(F.FileDate));
List.SubItems.Add(x);
case F.FileType of
fetDirectory:List.ImageIndex := 0;
fetFile:List.ImageIndex := 1;
fetSymlink:List.ImageIndex := 2;
end;
for Index:= 0 to LView.Items.Count - 1 do
case Integer(LView.Items[Index].Data) of
0: Inc(Folders);
1: Inc(Files);
end;
FolderPane1.Caption:='Папок: '+IntToStr(Folders);
FilePane2.Caption:='Файлов: '+IntToStr(Files);
except
on E : Exception do
Log(E.Message, true);
end;
end;
Например в ListView видно 3 папки и один файл, Folders показывает 4 а файлов 0.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|