Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет.doc
Скачиваний:
10
Добавлен:
12.02.2016
Размер:
21.98 Mб
Скачать

Создание правильного xml документа (пакета)

  1. В правом окне DataPacketвызовем командуOpenDataPacketи откроем исходный пакет.

  1. Затем выполним команду SelectAllконтекстного меню.

  1. Далее выполним команду XMLfromDataPacketглавного менюCreate, которая вызовет окно описания структуры пакета, в котором подтверждаем выполнение командной кнопкойCreate. После выполнения данной команды структура пакета отобразится в левом окне утилиты.

  1. Далее удаляем из правого окна исходный документ, выполнив команду Clearконтекстного меню.

  1. При необходимости структуру XMLдокумента можно сохранить выполнив командуSaveменюFile.

  2. Создание XMLпакета изXMLдокумента выполняется в обратной последовательности.

  3. Первым действием выполняем команду SelectALLконтекстного меню.

  4. Далее в окне NodePropertiesопределяет значение атрибутов для каждого узла и поля. Обратите внимание на тот факт, что для узлаLink(в нашем случае) необходимо выбрать значениеNested=true.

  5. После определения значений атрибутов всех полей выполняем команду DataPacketfromXMLменюCreate, которая преобразуетXML документ вXML пакет.

  6. После выполнения команды структура правильного XMLпакета будет представлена в правом окне.

  7. Последним действием является сохранение файла пакета путем выполнения команды SavedataPacketконтекстного меню.

После выполнения указанных действий пакетный файл будет понятен как Интернет экспловеру, так и ClientDataSet.

Домашнее задание 3 Построение b-дерева в компоненте TreeView

Дизайн проекта

  1. Создадим новый проект и сохраните его под именем Unit –> TreeUnit, Project –> B_Tree.

  2. Изменим имя формы на FormTree.

  3. Установим в форму элементы управления и компоненты доступа к данным (рис.1):

  • ImageList;

  • TreeView, изменив имя наTVC, свойствоAlign := alLeft, выбрав в свойствахImagesиStateImagesзначениеImageList1;

  • Splitter, установив свойствоAlign := alLeft;

  • Panel, установив свойствоAlign := alClient;

  • DBGrid, установив свойствоAlign := alTop;

  • MainMenu;

  • PopupMenu1, который свяжите сTVC(TreeView), выбрав вTVCв свойствеPopupMenuзначениеPopupMenu1;

  • ClientDataSet, изменив имя наCDSиDataSource1, изменив имя наDS.

Рис. 1 Расположение компонентов в форме

4. Опишите в редакторе полей CDS(ClientDataSet) следующую структуру полей таблицы:

  • ID — номер узла, тип поляAutoInc;

  • ParentID— номер родительского узла, тип поляInteger;

  • Name — название узла, тип поляString(25).

5. Создадим для CDSдоменную структуру, выполнив команду контекстного менюCreate Data Set.

6. Сохраните бинарный cdsфайл в папке проекта под именемTreeNode.cds.

7. Свяжите CDSфайломTreeNode.cdsпосредством свойстваFileName.

8. Свяжите компоненты DS->CDS, DBGrid1->DS, посредством свойствDataSetиDataSource, соответственно.

9. Выберем в форме ImageList1, выполните двойной щелчок мышью по компоненту и добавьте в него картинки (рис. 2), которые в дальнейшем будут отображать узлы дерева.

10. Сохраним проект и скомпилируйте приложение.

Рис. 2 Картинки узлов дерева

Разработка методов построения дерева

Создадим собственные методы построения дерева и объявите глобальную переменную доступа к файлу:

ExpandLevel- Раскрытие ветвей дерева (рис. 3);

RebuildTree- Построение дерева (рис. 4).

LocalFile: String; - Путь к локальному файлу TreeNode.cds;

Метод раскрытия ветвей дерева (рис. 5).

Рис. 3 Метод раскрытия ветвей дерева

Рис. 4 Метод построения дерева

Рис. 5 Декларирование методов

В обработчике события формы вызовем метод построения дерева (рис. 6).

Рис. 6 Вызов метода построения дерева при создании формы

В обработчике события onChangeкомпонентаTVC(TreeView) создадим метод обмена данными при навигации по дереву (рис. 7).

Рис. 7 метод обмена данными при навигации по дереву

В обработчике события onExpandingкомпонентаTVC(TreeView) создадим метод раскрытия ветви при навигации по дереву (рис. 8).

Рис. 8 Метод раскрытия ветви при навигации по дереву

В обработчике события onEditedкомпонентаTVC(TreeView) создам метод обмена данными с таблицейCDSпри редактировании названий узлов дерева (рис. 9).

Рис. 9 Метод обмена данными с таблицей CDS при редактировании названий узлов дерева

Создадим пункт контекстного меню (компонент PopupMenu1)AddRoot– “Добавить корневой элемент” и метод выполнения команды (рис. 10).

Рис. 10 Метод выполнения команды AddRoot – “Добавить корневой элемент”

Для реализации команды “Добавить дочерний элемент” необходимо создать личный метод FocusLevel– передача фокуса на новый узел (рис. 11), который декларируется в разделеPrivate(рис. 12).

Рис. 11 Метод передачи фокуса на новый узел

Рис. 12 Декларирование метода

Создадим пункт контекстного меню (компонент PopupMenu1) AddChild – “Добавить дочерний элемент” и метод выполнения команды (рис. 13).

Рис. 15 Метод выполнения команды AddChild – “Добавить дочерний элемент”

Создадим пункт контекстного меню (компонент PopupMenu1) DelElement– “Удалить элемент” и метод выполнения команды (рис. 16).

Рис. 16 Метод выполнения команды DelElement – “Удалить элемент”

Создадим в главном меню пункты File(Файл) иView(Вид). Для пункта меню Файл создадим командуNew(Новый), а для пункта меню Вид разработаум командыCollaps(Свернуть дерево),Expanded (Раскрыть дерево),Collaps(Свернуть дерево) иViewChildNode(Раскрыть дочернюю ветвь).

Для команд Collaps и Expandedнапишите соответствующие методы (рис. 17).

Рис. 17 Методы Collaps и Expan

Для реализации команды ViewChildNode создадим метод, раскрывающий в Grid'е список дочерних ветвей выбранного узла (рис. 18).

Рис. 18 Методы раскрытия дочерней ветви

Опишите метод реализации команды создания нового документа Newс выводом диалога предупреждения (рис. 19).

Рис. 19 Метод создания нового документа

Завершите дизайн приложения, приведя его к виду, показанному на рисунке 20.

Рис. 20 Вид приложения после выполнения команды ” Раскрыть дочернюю ветвь ”

Создадим новый набор данных (Data Set), выполнив команду Create Data Setконтекстного меню.

Сохраним бинарный cdsфайл в папке проекта под тем же именем (TreeNode.cds).

Добавим в форму компоненты (рис. 21), разместив их на соответствующих владельцах:

Panel2, установив свойствоAlign := alBottom;

DBNavigator1 (владелец Panel2), выбрав в свойствоDataSource := DS, и оставив видимыми только кнопки навигации, редактирования и сохранения;

GroupBox1, установив свойствоAlign := alBottom;

DBImage1 (владелец GroupBox1), установив свойствоAlign := alRight, выбрав в свойствеDataSource := DS, и в свойстве DataField поле Photo.

DBMemo1 (владелец GroupBox1), установив свойствоAlign := alClient, выбрав в свойствеDataSource := DS, и в свойстве DataField поле Info;

OpenPictureDialog1.

Рис. 21 Дополнительно установленные компоненты

Создадим новый пункт меню Insert(Вставка) и новую командуInsImage(Фотография).

Для команды напишите InsImage метод (рис. 22).

Рис. 22 Метод реализации команды вставка фотографии

Конечная программа приведена на рисунке 23.

Рис. 23 Результат выполнения