|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Сортировка папки\файлы
Подскажите как отсортировать по методу сначала папки потом файлы. Код написал а сортировку не получается осуществить, читал пробывал что в инете есть но увы. Код расписан так что все вроде понятно
Код:
procedure TForm1.FormCreate(Sender: TObject); var WFD:WIN32_Find_Data; HFile:THandle; Attr,Path:String; begin ListView1.Items.BeginUpdate;{Начинаем прорисовку} ListView1.Items.Clear; Path:=IncludeTrailingPathDelimiter('C:\Windows');{Добавляем '\' при его отсутствиии} HFile:=FindFirstFile(PChar(Path+'*.*'),WFD);{Ищем файлы только в указанном каталоге} if HFile<>INVALID_HANDLE_VALUE then {Проверяем отсутствие ошиьок} begin repeat if (WFD.dwFileAttributes and faHidden)<>2 then{Условие показыать\не показывать скрытые файлы} if StrPas(WFD.cFileName)<>'.' then with ListView1.Items.Add do begin if (WFD.dwFileAttributes and faDirectory)<>faDirectory then begin Caption:=WFD.cFileName; SubItems.Add(ExtractFileExt(WFD.cFileName));{Выделяем расширение} SubItems.Add('размер');{Размер файла} end else begin Caption:=(WFD.cFileName);{Имя папки} SubItems.Add('[Папка]');{Указываем что это папка} SubItems.Add('размер'); end; SubItems.Add('Дата');{Время создания папки\файла} Attr:='----'; if (WFD.dwFileAttributes and faArchive)<>0 then Attr[1]:='a';{Архивный} if (WFD.dwFileAttributes and faReadOnly)<>0 then Attr[2]:='r';{Только чтение} if (WFD.dwFileAttributes and faHidden)<>0 then Attr[3]:='h';{Скрытый} if (WFD.dwFileAttributes and faSysFile)<>0 then Attr[4]:='s';{Системный} SubItems.Add(Attr);{Атрибуты файла\папки} end; application.ProcessMessages; { Чтобы форма не сильно тормозила во время поиска} until FindNextFile(HFile,WFD)<>True; Winapi.Windows.FindClose(HFile); end; ListView1.Items.EndUpdate;{Заканчиваем прорисовку файлов} end; |
#2
|
||||
|
||||
Можно проще
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#4
|
||||
|
||||
А вы ещё не игрались со свойством SortType у ListView? По умолчанию оно задано как stNone
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#5
|
||||
|
||||
Цитата:
Не стоит путать форумы с богадельнями. © Bargest |
#6
|
|||
|
|||
Цитата:
|
#7
|
|||
|
|||
Кстати вот этой поверки будет мало
Код:
if StrPas(WFD.cFileName)<>'.' then А по сабжу - написать свою процедуру сравнения элементов Например такую Код:
procedure TForm1.ListView_Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); begin if (Item1.Subitems[0] = '[Папка]' )and(Item2.Subitems[0] <> '[Папка]') then Compare:= 1 else if (Item1.Subitems[0] <> '[Папка]' )and(Item2.Subitems[0] = '[Папка]') then Compare:= -1 else Compare:=CompareText(Item1.Caption,Item2.Caption); end; Код:
ListView1.OnCompare := ListView_Compare; |
#8
|
|||
|
|||
Пишут можно через TStringList сделать а как не написано. Может тут кто знает?
|
#9
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |