![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
  | 
| 
		 
			 
			#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  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
  |