Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как директории отобразить в ListBox? [D6, XP]


Proxytel ©   (2007-02-27 12:24:00) 

Есть путь директории на диске, внутри нее еще список вложеных директорий. Есть ли несложный способ отобразить все вложенные директории(но только на этом уровне, не глубже) в ListBox?
Файлы проигнорировать.

Например,
c:\dir\dir1
c:\dir\dir2
...
c:\dir\dirN

В ListBox надо чтоб было:
dir1
dir2
...
dirN


Proxytel   (2007-02-27 14:46:00) [1]


> Еще вариант, с обычным ListBox:
>
> SendMessage(ListBox1.Handle, LB_DIR, DDL_DIRECTORY or DDL_EXCLUSIVE,
>  Integer(PChar('C:\*.*')));


А это круто!


Proxytel   (2007-02-27 14:35:00) [2]


> type
>  TFriendDirectoryListBox = class(TDirectoryListBox);
>
> procedure TForm1.FormCreate(Sender: TObject);
> begin
>  TFriendDirectoryListBox(DirectoryListBox1).Style := lbStandard
> end;


Мда..
Гениально, но результат не совершенно не тот.

При выборе директории - остальные исчезают (это основное, что мне мешает и из-за чего я затеял все) + ко всему еще приплюсовываются в список все дерево до нужной директориию, включая 'C:\'


Юрий Зотов   (2007-02-27 14:26:00) [3]

Еще вариант, с обычным ListBox:

SendMessage(ListBox1.Handle, LB_DIR, DDL_DIRECTORY or DDL_EXCLUSIVE, Integer(PChar('C:\*.*')));


Юрий Зотов   (2007-02-27 14:07:00) [4]

Действительно - а как? И главное - а зачем?

Но уж если очень хочется, то так:

type
 TFriendDirectoryListBox = class(TDirectoryListBox);

procedure TForm1.FormCreate(Sender: TObject);
begin
 TFriendDirectoryListBox(DirectoryListBox1).Style := lbStandard
end;

Правда, тут уже придется писать код. Аж 2 строчки.


Proxytel   (2007-02-27 14:01:00) [5]

Пробовал так:

var
 SR:TSearchRec;
 attr:Integer;
---------------------------------
if DirectoryExists('C:\')then
   if FindFirst(IncludeTrailingBackslash('C:\')+'*.*',attr,SR) = 0 then
   begin
     repeat
       if(sr.Attr=faDirectory) then
         listBox2.Items.Append(sr.Name);
     until (FindNext(sr)<>0);
     FindClose(SR);
   end;


Появляется только 2 директории причем на фанарь полный!


Proxytel   (2007-02-27 13:49:00) [6]


> TDirectoryListBox, TDirectoryOutline, TShellTreeView.
>
> На выбор. И ни строчки своего кода.


Ну и как например в TDirectoryListBox отобразить директории не деревом а списком?


Юрий Зотов   (2007-02-27 13:02:00) [7]

TDirectoryListBox, TDirectoryOutline, TShellTreeView.

На выбор. И ни строчки своего кода.


ЮЮ   (2007-02-27 12:45:00) [8]

в Example код приложения целого приведен
 if sr.Attr and faDirectory = faDirectory тогда это директория


Proxytel   (2007-02-27 12:39:00) [9]

Дк в том-то и дело что как просканировать на предмет не всего содердимого, а исключительно директорий?


ЮЮ   (2007-02-27 12:34:00) [10]

Просканировать 'c:\dir' на предмет наличия директорий и поместить их имена в ListBox (см.Help + Examples по FindFirst)


Jeer   (2007-02-27 12:34:00) [11]

Трудно отсечь справа до последнего слэша ?
pos( ) и copy() | delete()


Наверх

Титульная страница Поиск, карта сайта Написать письмо