Форум: "Основная";
Текущий архив: 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