Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
$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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.043 c
14-1081995157
Думкин
2004-04-15 06:12
2004.04.11
С днем рождения! 15 апреля.


3-1079433260
ламер2
2004-03-16 13:34
2004.04.11
TIBQuery


4-1079006624
KADAN
2004-03-11 15:03
2004.04.11
передача строки другому приложению


6-1079099372
ASMiD
2004-03-12 16:49
2004.04.11
Как связать два компа через I-net


4-1078997925
BiN
2004-03-11 12:38
2004.04.11
"Вклиниться" в адр. пространство библиотеки до выполнения Dllmain





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский