Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2011, 01:35   #1
Isabel
Новичок
Джуниор
 
Регистрация: 02.02.2011
Сообщений: 2
Радость TListView файловый менеджер

Пишу файловый менеджер. Для этих целей пока знаю только функции FindNext и FindFirst, если кто знает лучший вариант посоветуйте пожалуйста.
Столкнулась с проблемой в TListView. Вот код:
Код:
procedure TMainForm.actRefreshExecute(Sender: TObject);
var res : TSearchRec;
begin
     lvFiles1.Clear;
     if ( FindFirst ( '*.*', faAnyFile, res ) <> 0 ) then Exit;
     repeat
           lvFiles1.Items.Add.Caption := res.name;
           if ( res.Attr = faDirectory ) then lvFiles1.Items[lvFiles1.ItemIndex].ImageIndex := 0
           else lvFiles1.Items[lvFiles1.ItemIndex].ImageIndex := 1;
     until ( FindNext ( res ) <> 0 );
end;
Картинка 0 - иконка папки, картинка 1 - иконка файла.

Как сделать так что бы сортировало список: сначала папки, а потом файлы, а не по алфавиту и все в перемешку? И как убрать из списка эти непонятные папки '.' и '..' ?
Зарание благодарна.
Isabel вне форума Ответить с цитированием
Старый 02.02.2011, 03:13   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> Как сделать так что бы сортировало список

SortType := stData or stBoth; OnCompare();

> как убрать из списка

Код:
if (('.' <> res.name) and ('..' <> res.name)) then ...
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 02.02.2011, 13:20   #3
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Код:
function TForml.AddFile(FileMask: string; FFileAttr:DWORD): Boolean;
   var
     Shlnfo: TSHFilelnfo;
      attributes: string;
       FileName: string;
      hFindFile: THandle;
       SearchRec: TSearchRec;
  function AttrStr(Attr: integer): string;
     begin
       Result := " ;
       if (FILE_ATTRIBUTE_DIRECTORY and Attr) > 0 then Result := Result + ";
       if (FILE ATTRIBUTE ARCHIVE and Attr)                            
         > 0 then Result := Result + 'A';
       if (FILE_ATTRIBUTE_READONLY and Attr) > 0 then Result := Result + 'R';
       if (FILEJYTTRIBUTE_HIDDEN and Attr) > 0 then Result := Result + 'H';
       if (FILE_ATTRIBUTE_SYSTEM and Attr) > 0 then Result := Result + 'S';
     end;
begin
     ListViewl.Items.BeginUpdate;
     ListViewl.Items.Clear;
     Result:= false;
     hFindFile := FindFirst(FileMask, FFileAttr, SearchRec);
     if hFindFile <> INVALID_HANDLE_VALUE then
    try
      repeat
          with SearchRec.FindData do
            begin
              if (SearchRec.Name = '.') or (SearchRec.Name = '..') or
              (SearchRec.Name = '') then continue;
              FileName := SlashSep(Edit1.Text, SearchRec.Name);
              SHGetFileInfo(PChar(FileName), 0, Shlnfo, SizeOf(Shlnfo),
                     SHGFI_TYPENAME or SHGFI_SYSICONINDEX);
              Attributes := AttrStr(dwFileAttributes);
                with ListViewl. Items.Add do
                   begin
                     Caption := SearchRec.Name;
                       //Присваиваю размер
                     Subltems.Add(IntToStr(SearchRec.Size));
                      Subltems.Add((ShInfo.szTypeName));
                     Subltems.Add(FileTimeToDateTimeStr(ftLastwriteTime));
                     Subltems.Add(attributes);
                     Subltems.Add(Editl.Text + cFileName);
                     if (FILE_ATTRIBUTE_DIRECTORY and dwFileAttributes) > 0
                             then
                    Subltems.Add('dir')
                    else
                         Subltems.Add('file');
                    end;
                 Result := true;
               end;
            until (FindNext(SearchRec) <> 0);
         finally
            FindClose(SearchRec);
        end;
         ListViewl. Items . EndUpdate;
end;
от Михаила Фленова('Библия Delphi')
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 02.02.2011, 23:32   #4
Isabel
Новичок
Джуниор
 
Регистрация: 02.02.2011
Сообщений: 2
По умолчанию

Сасибо! Убрала "." и ".." добавлением в начало цикла простого
Код:
 if ( res.Name = '.' ) or ( res.Name = '..' ) then Continue;
С сортировкой пока не разобралась.
И иконки отображаются только при .ViewSyle := vsIcon; Как их активировать в vsList и vsReport ?

Последний раз редактировалось Isabel; 02.02.2011 в 23:40.
Isabel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файловый менеджер akosh12345 Общие вопросы Delphi 12 11.05.2010 21:55
файловый менеджер чижик-пыжик Общие вопросы .NET 1 05.03.2010 11:51
Файловый менеджер на C sht0p0r Помощь студентам 3 07.12.2008 16:47
файловый менеджер greyshadow Общие вопросы Delphi 3 16.09.2007 19:23