![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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; |
|
#4
|
||||
|
||||
|
А вы ещё не игрались со свойством SortType у ListView? По умолчанию оно задано как stNone
|
|
#5
|
|||
|
|||
|
Цитата:
|
|
#6
|
|||
|
|||
|
Кстати вот этой поверки будет мало
Код:
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; |
|
#7
|
|||
|
|||
|
Пишут можно через TStringList сделать а как не написано. Может тут кто знает?
|
|
#8
|
||||
|
||||
|
Цитата:
|