Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания по ПР ПМ0_Копец1.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.37 Mб
Скачать

Контрольные вопросы

  1. Назовите системные диалоги.

  2. Основной метод, которым производится обращение к любому диалогу?

  3. Какие диалоговые окна являются модальными?

  4. Назовите основными свойствами классов TOpenDialog и TSaveDialog.

  5. В каком свойстве компонента SaveDialog устанавливаются расширения сохраняемых файлов?

Практическая работа №20

Тема: «Использование дерева данных в приложениях».

Цель работы: Научиться использовать дерево данных в приложениях.

Время выполнения: подготовка – 5 мин; выполнение – 165 мин.; проверка – 10 мин; всего – 180 мин.

Теоретические сведения

Компонент отображения дерева данных — TreeView

Компонент TreeView (страница Win32) служит для отображения иерархических данных в виде дерева, в котором пользователь может выбрать нужный ему узел или узлы.

Основным свойством TreeView, содержащим информацию об узлах дерева, является Items. Доступ к информации об отдельных узлах осуществляется через свойство Items[int Index]. Например, TreeViewl‑>Items->Item[0] — это узел дерева с индексом 0 (первый узел дерева). Каждый узел является объектом типа TTreeNodes, обладающим своими свойствами и методами (см.ниже).

Есть два способа формирования дерева: в окне редактора узлов дерева и программно.

I способ

Используется во время проектирования. Вызов окна редактора узлов производится двойным щелчком на компоненте TreeView или нажатием кнопки с многоточием около свойства Items в окне Инспектора Объектов.

Назначение кнопок окна редактора узлов

  • New Item (новый узел) позволяет добавить в дерево новый узел. Он будет расположен на том же уровне, на котором расположен узел, выделенный курсором в момент щелчка на кнопке New Item.

  • New Subltem (новый дочерний узел) позволяет добавить в дерево дочерний узел. Он будет расположен на уровень ниже уровня того узла, который выделен курсором в момент щелчка на кнопке New Subltem.

  • Delete (удалить) удаляет выделенный узел дерева.

  • Load позволяет загрузить структуру дерева из файла. Файл, хранящий структуру дерева это обычный текстовый файл, содержащий тексты узлов. Уровни узлов обозначаются отступами. Например, файл дерева и может иметь вид:

производство

цех 1

цех 2

цех 3

управление

администрация

бухгалтерия

II способ

Дерево можно формировать или перестраивать и во время выполнения приложения. Для этого служит ряд методов объектов типа TTreeNodes. Следующие методы позволяют вставлять в дерево новые узлы:

Add( Node, S)

Добавляет новый узел с текстом S как последний узел уровня, на котором расположен Node.

AddFirst( Node, S)

Вставляет новый узел с текстом S как первый из узлов уровня, на котором находится Node. Индексы последующих узлов увеличиваются на 1.

Insert(Node, S)

Вставляет новый узел с текстом S сразу после узла Node на то же уровень. Индексы последующих узлов увеличиваются на 1.

AddChiId( Node, S)

Добавляет узел с текстом S как последний дочерний узла Node.

AddChiIdFirst(Node, S)

Вставляет новый узел с текстом S как первый из дочерних узлов узла Node. Индексы последующих узлов увеличиваются на 1

Например:

//вставить на место выделенного, остальные сдвигаются //вниз:

TreeView1->Items->Insert(TreeView1->Items->

Item[TreeView1->Selected->AbsoluteIndex], "");

//Вставить нулевым на тот же уровень, что и выделенный:

TreeView1->Items->AddFirst(TreeView1->Items->

Item[TreeView1->Selected->AbsoluteIndex], "");

//Добавляет новый узел как последний узел уровня, на //котором расположен выделенный:

TreeView1->Items->Add(TreeView1->Items->

Item[TreeView1->Selected->AbsoluteIndex], "");

Каждый из этих методов возвращает вставленный узел. Ниже в качестве примера приведен код, формирующий дерево, которое вы можете видеть на рис.1

Рис.1

TreeViewl->Items->Clear(); // очистка списка

// добавление корневого узла "производство" (индекс 0)

TreeViewl->Items->Add(NULL, "Мои рисунки");

/* добавление дочених узлов "цех 1" - "цех 3"

(индексы 1-3) */

TreeViewl->Items->AddChiId(TreeViewl->Items->Item[0] , "Мореходы")

TreeViewl->Items->AddChild(TreeViewl->Items->Item[0],"Художник Васильев")

TreeViewl->Items->AddChild(TreeViewl->Items->Item[0],"Фото ВОВ")

Добавим программно ещё один узел «Тексты» с подузлами «Биографии» и «Пояснения»:

Рис.2

/* добавление корневого узла "Тексты" после узла "Мои рисунки" (индекс 4) */

TreeViewl->Items->Add(TreeViewl->Items->Item[0], "Тексты"

/* добавление дочених узлов "Биографии" и "Поясненияё" узла "управление" */

TreeViewl->Items->AddChild(TreeViewl->Items->Item[4],"Биографии");

TreeViewl->Items->AddChild(TreeViewl->Items->Item[4],"Пояснения");

Дерево может быть сколь угодно разветвленным. Например, следующие операторы добавляют дочерние узлы «Крузенштерн» и «Лисянский» в сформированный ранее узел «Мореходы»:

TreeViewl->Items->AddChild(ТreeViewl->Items->Item[l], "Крузенштерн");

TreeViewl->Items->AddChiId(TreeViewl->Items->Item[l], "Лисянский");

Рис.3

TTreeNode *Node=TreeView1->Selected;

int level=Node->Level; //Определяем уровень выделенного узла

int ind=Node->Index; //Идекс выделенного узла внутри уровня

TreeViewl->Items->Item[l]->Text ;// Текст,связанный с узлом 1

Для удаления узлов имеется два метода: Clear(void), очищающий все дерево, и Delete(TTreeNode* Node), удаляющий указанный узел Node и все его узлы — потомки.

Например, оператор

TreeViewl->Items->Clear(); /*удалит в нашем примере все узлы*/

TreeViewl->Items->Delete(TreeViewl->Items->Item[l]) ; /*удалит узел «Мореходы» и его дочерние узлы*/

Для редактирования текста выделенного узла есть метод:

TreeView1->Selected->EditText() ;

Его можно вставить, например, в обработку события OnDblClick

Вызов контекстного меню правой клавишей мышки.

TreeView1->PopupMenu = PopupMenu1;