Дерево каталогов
Сегодня поговорим о том, как при помощи TreeView сделать дерево каталогов, то есть нечто, вроде левой части Проводника. Самый простой способ — это при запуске программы найти все каталоги на диске и засунуть их в TreeView. Но у этого способа есть несколько недостатков. Во-первых, он долгий, особенно, если включен zif. Во-вторых, даже если закрыть и открыть какую-то папку, она не обновится. Поэтому лучше всего вначале сделать в TreeView список дисков со значком «+», то есть указать, что на диске есть каталоги. Ёто не всегда верно, но проверять, правда ли это, долго из-за дисковода. При попытке раскрыть каталог или диск программа ищет подкаталоги и добавляет их в ListView. В каждом подкаталоге программа пытается найти хотя бы один подкаталог. В зависимости от результатов поиска «+» появляется или нет.
В этой программе используются иконки из файла FileCtrl.res, находящемся в каталоге «Delphi5\lib».
implementation procedure NextLevel(ParentNode: TTreeNode); function DirectoryName(name: string): boolean; begin result := (name <> '.') and (name <> '..'); end; var sr, srChild: TSearchRec; node: TTreeNode; path: string; begin node := ParentNode; path := ''; repeat path := node.Text + '\' + path; node := node.Parent; until node = nil; if FindFirst(path + '*.*', faDirectory, sr) = 0 then begin repeat if (sr.Attr and faDirectory <> 0) and DirectoryName(sr.Name) then begin node := Form1.TreeView1.Items.AddChild(ParentNode, sr.Name); node.ImageIndex := 0; node.SelectedIndex := 1; node.HasChildren := false; if FindFirst(path + sr.Name + '\*.*', faDirectory, srChild) = 0 then begin repeat if (srChild.Attr and faDirectory <> 0) and DirectoryName(srChild.Name) then node.HasChildren := true; until (FindNext(srChild) <> 0) or node.HasChildren; end; FindClose(srChild); end; until FindNext(sr) <> 0; end else ParentNode.HasChildren := false; FindClose(sr); end; procedure TForm1.FormCreate(Sender: TObject); const IconNames: array [0..6] of string = ('CLOSEDFOLDER', 'OPENFOLDER', 'FLOPPY', 'HARD', 'NETWORK', 'CDROM', 'RAM'); var c: char; s: string; node: TTreeNode; DriveType: integer; bm, mask: TBitmap; i: integer; begin TreeView1.Items.BeginUpdate; TreeView1.Images := TImageList.CreateSize(16, 16); bm := TBitmap.Create; mask := TBitmap.Create; for i := low(IconNames) to high(IconNames) do begin bm.Handle := LoadBitmap(HInstance, PChar(IconNames[i])); bm.Width := 16; bm.Height := 16; mask.Assign(bm); mask.Mask(clBlue); TreeView1.Images.Add(bm, mask); end; for c := 'A' to 'Z' do begin s := c + ':'; DriveType := GetDriveType(PChar(s)); if DriveType = 1 then continue; node := Form1.TreeView1.Items.AddChild(nil, s); case DriveType of DRIVE_REMOVABLE: node.ImageIndex := 2; DRIVE_FIXED: node.ImageIndex := 3; DRIVE_REMOTE: node.ImageIndex := 4; DRIVE_CDROM: node.ImageIndex := 5; else node.ImageIndex := 6; end; node.SelectedIndex := node.ImageIndex; node.HasChildren := true; end; TreeView1.Items.EndUpdate; end; procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean); begin TreeView1.Items.BeginUpdate; node.DeleteChildren; NextLevel(node); TreeView1.Items.EndUpdate; end;
Информатика. Задание: Построить дерево каталогов С:/рисунки/природа/небо С:/рисунки/природа /снег С:/рисунки /компьютер/монитор. С:/Мои документы /доклад. doc
Как-то примерно так это должно выглядеть: От Локального диска (С) две стрелочки к Мои документы и Рисунки, от Мои документы одна стрелочка к Доклад.doc, а от Рисунки 2 стрелочки — одна к Компьютер, другая к Природа, от Компьютер стрелочка к Монитор.bmp, от Природа 2 стрелочки: к Небо.bmp и к Снег.bmp
- Связаться с нами
- Правила проекта
- Лицензионное соглашение
- Политика конфиденциальности
Как создать дерево каталогов
Чтобы создать подкаталог вместе со всеми каталогами, расположенными выше, которые еще не существуют, используйте команду mkdir с опцией `-p’. Это очень удобно при создании сложных деревьев каталогов, чтобы не создавать каждый каталог отдельной командой.
Чтобы создать подкаталог `work/completed/2001′ — вместе с его корнем `completed’, который в свою очередь, является подкаталогом каталога `work’ в текущем каталоге, наберите:
$ mkdir -p work/completed/2001 [Enter]
Alex Otwagin 2002-12-16
Создание дерева папок с помощью иерархического справочника
Элементы приложения можно группировать по папкам. В этом случае дерево папок будет отображаться в левой части экрана под названием приложения, справа вы увидите их содержимое.
Для создания структуры папок воспользуйтесь настройкой Иерархический справочник .
Настроить иерархию папок
- Откройте меню приложения, нажав на шестерёнку рядом с его названием.
- Выберите пункт Иерархический справочник .
- Активируйте опцию Включить иерархический справочник .
- Нажмите Сохранить . Под названием приложения появится фильтр Все записи .
- Нажмите на изображение карандаша справа от фильтра Все записи .
- Добавьте папки.
Для создания вложенных папок:
- Нажмите на шестерёнку справа от названия папки, в которой хотите настроить вложенную структуру. Откроется её меню.
- В меню выберите пункт Добавить вложенную папку и введите название новой папки. Таких папок можно добавить несколько.
- Внутри каждой вложенной папки вы можете создать папки следующего уровня. Количество вложенных уровней не ограничено.
После того, как вы создали и настроили дерево, нажмите на крестик справа от фильтра Все записи , чтобы выйти из режима редактирования.
При экспорте приложения с настроенным иерархическим справочником все созданные папки также будут экспортированы. При импорте этого приложения в другой раздел или компанию вся структура папок сохранится.
Добавить элемент в папку
Откройте карточку элемента. В левом верхнем углу указано, в какой папке он лежит. Если папка вложенная, то будет указан весь путь до неё. Если элемент ещё не определён ни в одну из папок, будет указано Все записи .

Чтобы поместить элемент в папку, нажмите на карандаш и в открывшемся списке выберите нужную папку. Затем нажмите Переместить . Таким же образом в дальнейшем вы сможете перемещать элементы между папками.
По умолчанию на этапе создания элемента поместить его в папку нельзя. Это действие доступно только для тех элементов, которые уже хранятся в приложении. Чтобы поместить элемент в папку при добавлении, разместите на форме создания виджет Навигация по папкам.
Действия с папками
Чтобы открыть меню для работы с папкой, нажмите на карандаш рядом с фильтром Все записи . Затем нажмите на шестерёнку справа от названия нужной папки. Откроется меню с доступными действиями.
- Переименовать — введите новое название, как при создании папки;
- Переместить — выберите любую папку в вашей структуре, куда хотите переместить текущую папку;
- Права доступа — вы можете настроить права доступа для каждой папки;
- Удалить — удаляя папку, вы одновременно удаляете и все вложенные в нее папки. Элементы приложения не удалятся и будут видны по фильтру Все записи .
Фильтры папки
Помимо стандартного поиска по элементам приложения, в иерархическом справочнике доступны фильтры папки. Это фильтры, которые вы создаёте для поиска в рамках определённой папки. Для того, чтобы создать новый фильтр папки, откройте поиск по параметрам, заполните поля для поиска, нажмите Сохранить как фильтр для папки .

Создавать и редактировать фильтры директории могут только пользователи, входящие в группу Администраторы.
Созданный фильтр будет добавлен в дерево папок — в ту папку, которая была открыта при его создании. Названия фильтров в дереве указаны курсивом, чтобы было легко отличить их от самих папок.
Нажав на фильтр, пользователь увидит все элементы, соответствующие параметрам поиска, к которым у него есть доступ. При этом можно дополнительно применить обычные фильтры, созданные для этого приложения.
Фильтр можно переименовать, переместить или удалить. Для этого нажмите на карандаш рядом с фильтром Все записи . Затем нажмите на шестерёнку справа от названия нужной папки и выберите подходящий пункт меню.
Иерархический справочник на формах других приложений
Когда приложение с настроенным иерархическим справочником размещается на форме другого приложения, то при заполнении поля и выборе элемента также будет отображаться дерево папок.
Например, при создании заказа на его форму необходимо добавить договор, который хранится в приложении с настроенным иерархическим справочником. Для этого пользователь нажимает на значок лупы рядом с полем Договор .
В открывшемся окне слева отображается настроенное в приложении дерево папок. В правой части — список всех элементов в выбранной папке.

Чтобы найти элемент, укажите его название в строке поиска на верхней панели окна. Поиск будет осуществляться среди элементов в выбранной папке.
Настройки доступа
По умолчанию доступ к элементам регулируется на уровне приложения, но вы можете ограничивать доступ на уровне папок:
- настроить общие права доступа ко всем папкам приложения;
- установить доступ для отдельной папки приложения.
При этом по фильтру Все записи отобразятся элементы приложений из всех папок, к которым у вас есть доступ.
Подробнее об этих настройках читайте в статье «Ограничение на уровне папок приложения».
