| 
| 
 | Вопрос # 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.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |