Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Дерево папок   Найти похожие ветки 

 
$tranger ©   (2004-03-13 20:02) [0]

Доброго времени суток, господа. Проблема у меня появилась следующая: мне нужно дерево папок как в проводнике, а DirectoryListBox не отображает системных папок. Помогите, пожалуйста. Спасибо.


 
Юрий Зотов ©   (2004-03-13 20:17) [1]

FinFirst-FindNext-FindClose. С рекурсией.


 
$tranger ©   (2004-03-13 20:22) [2]

Юрий Зотов, А попроще?


 
Юрий Зотов ©   (2004-03-13 20:26) [3]

Как? Еще проще? Проще уже некуда.


 
$tranger ©   (2004-03-13 20:33) [4]

Что это значит? Я начинающий программер...


 
TAV   (2004-03-13 20:38) [5]

{-------------------------------------------------}
   // поиск подкаталогов в каталоге inDir
   // возвращает кол-во найденных
   // dirList - список найденных каталогов
   {-------------------------------------------------}
   function FindSubDir(inDir: String): byte;
   var
     sr: TSearchRec;
     sFileName : String;
     jIndex : Integer;
     CountSDir: byte;
     dirList: array[1..MaxDir] of string;
   begin
     result:=0;
     CountSDir:=0;
     inDir:=inDir + "\*.*";
     jIndex := FindFirst(inDir,faDirectory, sr);
     while jIndex = 0 do begin
       sFileName := ExtractFileDir(inDir) +"\"+sr.Name;
       if (sr.Name <> "" ) and
          (sr.Name <> ".") and
          (sr.Name <> "..") then begin
         inc(CountSDir);
         dirList[CountSDir]:=sr.Name;
       end;
       jIndex := FindNext(sr);
     end;
     FindClose(sr);

     result:=CountSDir;
   end;


 
Defunct ©   (2004-03-13 20:42) [6]

> DirectoryListBox не отображает системных папок.
> Что это значит? Я начинающий программер...

А зачем вам системные папки?


 
Юрий Зотов ©   (2004-03-13 21:02) [7]

> $tranger ©   (13.03.04 20:33) [4]

ОК. Значит это вот что - см. код ниже и постарайтесь разобрать его досконально, чтобы буквально каждая строчка и каждая буква стала абсолютно понятна - зачем она нужна, почему именно в этом месте и почему именно в таком виде.

type
 TForm1 = class(TForm)
   TreeView1: TTreeView;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   procedure FillTree(Dir: string; Node: TTreeNode);
 end;

procedure TForm1.FillTree(Dir: string; Node: TTreeNode);
var
 SR: TSearchRec;
begin
 Dir := IncludeTrailingBackslash(Dir);
 if FindFirst(Dir + "*.*", faAnyFile and not faVolumeID, SR) = 0 then
 try
   repeat
     if (SR.Attr and faDirectory = faDirectory) and (SR.Name <> ".") and (SR.Name <> "..") then
       FillTree(Dir + SR.Name, TreeView1.Items.AddChild(Node, SR.Name))
   until FindNext(SR) <> 0
 finally
   FindClose(SR)
 end
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 Dir: string;
begin
 if SelectDirectory("Выберите корневую папку дерева", "", Dir) then
 with TreeView1.Items do
 begin
   Screen.Cursor := crHourGlass;
   BeginUpdate;
   try
     Clear;
     FillTree(Dir, TreeView1.Items.AddChildFirst(nil, Dir))
   finally
     EndUpdate;
     Screen.Cursor := crDefault
   end
 end
end;


 
$tranger ©   (2004-03-14 07:06) [8]


> А зачем вам системные папки?

Дело в том, что папки в Win98 у которых прсвоена иконка присваивается статус системных


 
Cobalt ©   (2004-03-14 14:54) [9]

Вот это да, первый раз про такое слышу.
А поподробнее не расскажите?
С примерчиками папок, иконок и т.д.


 
$tranger ©   (2004-03-14 20:14) [10]

[7] На SelectDirectory комп упорно выдает Un.. короче не знает он что это такое... Поясните, плиз

[9] Программка Microangelo, хотя можно и вручную установить атрибут +S и в файле Desktop.ini прописать:
[.ShellClassInfo]
 ConfirmFileOp=0
 IconFile=Имя иконки с расширением
 IconIndex=0
 OriginalIcon=Адрес\Имя иконки с расширением


 
Юрий Зотов ©   (2004-03-14 20:55) [11]

> $tranger ©   (14.03.04 20:14) [10]

У Вас кнопка F1 работает? Нажмите и прочитайте - unit FileCtrl.
Для этого вовсе не обязательно быть продвинутым. Вполне доступно и начинающему.


 
$tranger ©   (2004-03-16 20:07) [12]

Юрий, а Вам не кажется, что этот способ [7] грузится долговато. Мне нужно просто такое же дерево как в проводнике, также с таким я сталкивался в ACDSee и мн. др. программах


 
Vlad ©   (2004-03-16 20:32) [13]


> Юрий, а Вам не кажется, что этот способ [7] грузится долговато.
>

Если долговато, тогда не нужно строить сразу все дерево.
Можно ведь вложенные папки строить при раскрытии узла, т.е. только при необходимости. И, кстати, рекурсия тогда не понадобится.


 
Юрий Зотов ©   (2004-03-17 12:19) [14]

> $tranger ©   (16.03.04 20:07) [12]
> Юрий, а Вам не кажется, что этот способ [7] грузится долговато.

Нет, не кажется. Что тут "казаться", когда это и так ТОЧНО известно, без всяких "казаний" - чтобы обойти большое и сложное дерево каталогов требуется время, и тем большее, чем больше и сложнее само дерево. Как раз поэтому я и вставил туда изменение вида курсора на песочные часы и обратно.

Мне кажется другое - что это всего лишь пример, в котором нужно разобраться и на этой основе написать СВОЙ код, под СВОЮ задачу.

Например, см. [13]. Или можно ввести кэширование, чтобы каждый раз не перестраивать все дерево. Или совместить. Или еще что-то. В общем, ни один пример не избавляет от необходимости думать.


 
Игорь Шевченко ©   (2004-03-17 12:32) [15]


> Мне нужно просто такое же дерево как в проводнике, также
> с таким я сталкивался в ACDSee и мн. др. программах


В этих программах дерево строится без рекурсии, а нужное поддерево сканируется при нажатии на "+" в TreeView


 
Arm79 ©   (2004-03-17 16:11) [16]

ДиректориЛистБокс - из вкладки Вин3.1

Есть, если не ошибаюсь, ДиректориЛистВью или ДиректориТриВью - он все отлично отображает

Отображение папок зависит и от настроек эксплорера. Нужно изменить в свойствах папки - отображать скрытые и системные


 
$tranger ©   (2004-03-17 20:17) [17]


> ДиректориЛистБокс - из вкладки Вин3.1
>
> Есть, если не ошибаюсь, ДиректориЛистВью или ДиректориТриВью
> - он все отлично отображает
>
> Отображение папок зависит и от настроек эксплорера. Нужно
> изменить в свойствах папки - отображать скрытые и системные
Из Win3.1 как раз таки и не видит СИСТЕМНЫХ ПАПОК (т.е. папки с атрибутом +S, не обязательно Windows и т.п.)


 
Defunct ©   (2004-03-18 02:17) [18]

$tranger ©   (14.03.04 07:06) [8]
> Дело в том, что папки в Win98 у которых прсвоена иконка присваивается статус системных


Пользуйтесь, ShellTreeView, ShellListView (На них действуют все настройки проаодника).

Из Win3.1 как раз таки и не видит СИСТЕМНЫХ ПАПОК (т.е. папки с атрибутом +S, не обязательно Windows и т.п.)
Палитра Samples, та что на одну позицию правее от Win3.1 ;)

Удачи.


 
Defunct ©   (2004-03-18 02:25) [19]

(На них действуют все настройки проВодника*).


 
$tranger ©   (2004-03-18 10:06) [20]

Defunct, я пробовал это раньше, попробовал сейчас еще раз и все же папку с атрибутом +S не видно... Только я убрал этот атрибут -уаля - фокус вышел.
А вот ShellListVew, ShellTreeView я вообще не обнаружил... :-( Может они появились в более поздних версиях Delphi, у меня D5?


 
Defunct ©   (2004-03-18 16:31) [21]

> Может они появились в более поздних версиях Delphi, у меня D5?

В D7 точно есть, очень приятные компоненты


 
Defunct ©   (2004-03-18 17:36) [22]

> Defunct, я пробовал это раньше, попробовал сейчас еще раз и все же папку с атрибутом +S не видно... Только я убрал этот атрибут -уаля - фокус вышел.

Как же Вы могли пробовать это раньше, если у Вас нет этих компонентов? ShellTreeView выглядит также как дерево каталогов в проводнике. ShellTreeView+ShellListView = считайте готовый проводник.


 
Arm79 ©   (2004-03-18 19:00) [23]

$tranger ©   (17.03.04 20:17) [17]
У меня DirectoryListBox отлично все отображает и без настроек проводника - надо в свойствах компонента указать просмотр скрытых и системных папок

в пятом должны быть эти компоненты (см Defunct ©   (18.03.04 02:17) [18])


 
$tranger ©   (2004-03-19 11:20) [24]

Arm79, в том то и дело что нет... Может есть у кого аналог?


 
Amoeba ©   (2004-03-19 11:33) [25]

В D5 этих компонет еще нет. Но аналоги есть в ныне бесплатной библиотеке ShellShock
http://sourceforge.net/projects/tpshellshock


 
$tranger ©   (2004-03-20 09:36) [26]

Через, кажется, 3 ссылки меня перекинуло на http://prdownloads.sourceforge.net/tpshellshock/tpshellshock_1_02.zip?download ... Куда бы не пошел - идиотизм... Можно ссылочку на конкретный ZIP. Спасибо



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.062 c
6-1076166174
Александр
2004-02-07 18:02
2004.04.11
pop3.rambler.ru


1-1079771298
Rentgen
2004-03-20 11:28
2004.04.11
Номер компонента


8-1075965594
mastervel
2004-02-05 10:19
2004.04.11
DirectShow и CDDA


7-1076255775
Павел
2004-02-08 18:56
2004.04.11
Вирусы


1-1082562776
Insert
2004-04-21 19:52
2004.04.11
Запуск readme