Изучение компонента Delphy — TTreeView
Контрольная работа - Компьютеры, программирование
Другие контрольные работы по предмету Компьютеры, программирование
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
ОДЕССКАЯ ГОСУДАРСТВЕННАЯ АКАДЕМИЯ ХОЛОДА
Лабораторная работа
по РСАПР
Изучение компонента Delphy - TTreeView
Одесса, 2011
Задание
Цель: Получение навыков работы с TTreeView.
Задача
.Создать GUI-приложение.
Дерево имеет вид:
Город1
Ул.1
Дом1
Дом2
Ул.2
Ул.3
Город2
Обеспечить заполнение дерева, очистку, анализ, редакция элементов.
Заполнение:
городов не менее 5, улиц не менее 10 в каждом городе, домов не менее 3.
Анализ:
. Подсчитать общее количество домов
. Обходя дерево вывести в файл информацию вида:
ГОРОД -Х \ УЛИЦА -Х \ ДОМ -Х
Редакция:
Удаление элементов из PopUp меню с подтверждением.
Удалять ГОРОДА и УЛИЦЫ можно, если в них нет вложенных элементов.
Прочее:
Раскрытие и закрытие всех элементов из PopUp меню.
2. Краткое описание реализации каждого из пунктов задания и
листинги программ с комментариями и пояснениями принятых
решений
Данная программа выполняет следующие пункты задания: заполнение дерева, при этом дерево содержит не менее пяти городов, десяти улиц, в каждой из которых не менее трех домов, анализ, т.е. подсчет количества домов и вывод информации при обходе дерева. В программе также реализовано удаление элементов дерева из PopUp меню с подтверждением, при чем узел не должен содержать вложенные компоненты. Так же предусмотрена возможность раскрытия и закрытия всех элементов из PopUp меню.
Для автоматического заполнения дерева используется следующая процедура procedure TForm1.BitBtn2Click(Sender:TObject), описанная ниже:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
TreeView1.Items.Clear; //очистка дерева
TreeView1.Items.Add (nil,'Одесса'); //создание первого родительского узла
TreeView1.Items.AddChild (TreeView1.Items.Item [0],'Тенистая'); //дочерний узел
TreeView1.Items.AddChild (TreeView1.Items.Item [1],'дом1');
TreeView1.Items.AddChild (TreeView1.Items.Item [1],'дом56');
TreeView1.Items.AddChild (TreeView1.Items.Item [1],'дом4');
TreeView1.Items.AddChild (TreeView1.Items.Item [0],'Солнечная');
TreeView1.Items.AddChild (TreeView1.Items.Item [5],'дом9');
TreeView1.Items.AddChild (TreeView1.Items.Item [5],'дом46');
TreeView1.Items.AddChild (TreeView1.Items.Item [5],'дом67');
TreeView1.Items.Add (TreeView1.Items.Item [0],'Киев');
TreeView1.Items.AddChild (TreeView1.Items.Item [41],'Тенистая');
TreeView1.Items.AddChild (TreeView1.Items.Item [42],'дом1');
TreeView1.Items.AddChild (TreeView1.Items.Item [42],'дом56');
TreeView1.Items.AddChild (TreeView1.Items.Item [42],'дом4');
TreeView1.Items.AddChild (TreeView1.Items.Item [41],'Солнечная');
TreeView1.Items.AddChild (TreeView1.Items.Item [46],'дом9');
TreeView1.Items.AddChild (TreeView1.Items.Item [46],'дом46');
TreeView1.Items.AddChild (TreeView1.Items.Item [46],'дом67');
TreeView1.Items.AddChild (TreeView1.Items.Item [41],'Зеленая');
TreeView1.Items.AddChild (TreeView1.Items.Item [50],'дом94');
TreeView1.Items.AddChild (TreeView1.Items.Item [50],'дом1');
TreeView1.Items.AddChild (TreeView1.Items.Item [50],'дом32');
TreeView1.RightClickSelect:=true;;
Анализ дерева реализован в следующих ниже перечисленных процедурах, которые позволяют подсчитать общее количество домов, а также вывести информацию при обходе дерева.
procedure TForm1.Button1Click(Sender: TObject);k,n,g:integer;
Memo1.Lines.Clear; //очистить мемо
g:=0;
Anode:=TreeView1.Items.GetFirstNode; //выбор первого узла
k:=0;
while Anode<>nil do
begin
If (Anode.Level=0) then
begin
for n:=0 to Anode.Count-1 do
k:=k+Anode.Item[n].Count; //подсчет домов
end;
Anode:=Anode.getNextSibling; //следующий узел
g:=g+k;
k:=0;
end;
Memo1.Lines.Add('Общее количество домов'+IntToStr(g)); //вывод в мемо
end;;
Процедура, позволяющая вывести информацию при обходе дерева:
procedure TForm1.BitBtn3Click(Sender: TObject);j:integer;
begin
Memo1.Lines.Clear;
if Treeview1.Items.GetFirstNode = nil then abort; //дерево пустое - прервать процесс
Anode:=Treeview1.Items.GetFirstNode; //выбор родительского узла
Anode1:=Anode.getFirstChild; //выбор дочернего узла
while Anode <> nil do
begin
while Anode1 <> nil do
begin
if (Anode1.Level=1) then
begin
for j:=0 to Anode1.Count-1 do .Lines.Add (Anode1.Parent.Text+'/'+Anode1.text+'/'+Anode1.Item[j].Text);
end;
Anode1:=Anode1.GetNext;
end;
Anode: =Anode.GetNext;
end;
Memo1.Lines.SaveToFile('Отчет.txt'); //сохранение в файл
end;
Ниже описаны процедуры, благодаря которым возможно удаление элементов дерева из PopUp меню с подтверждением об удалении, раскрытие и сворачивание элементов дерева.
Процедура удаления элемента:
TForm1.N1Click(Sender: TObject);
begin
if (Application.MessageBox('Вы действительно хотите удалить запись?',
'Подтвердите удаление записи',
MB_YESNO+MB_ICONQUESTION)<>IDNO)
then
if TreeView1.Selected.getFirstChild=nil
then TreeView1.Selected.delete
else showmessage('Удаление невозможно, узел содержит элементы!');
end;
В данной процедуре описан метод, реализующий развертывание дерева:
procedure TForm1.N3Click(Sender: TObject);
TreeView1.FullExpand;;
В процедуре procedure TForm1.N4Click(Sender:TObject); реализуется свертывание элементов дерева:
TForm1.N4Click(Sender: TObject);
begin.FullCollapse;;
Для очистки дерева используется следующая процедура:
procedure TForm1.BitBtn6Click(Sender: TObject);.Items.Clear;;
2. Демонстрация работы, исходные данные и результаты
Для того, чтобы запустить приложение исходной программы необходимо запустить файл TreeView с расширением exe. После запуска данного файла перед пользователем появится главная форма программы.На ней представлено Дерево в свернутом виде, со всеми записями. ( см Рис1)
Рисунок 1. Главная форма
На форме расположены пять кнопок: Создать дерево, Удалить, Отобразить элементы дерева и Рассчитать количество домов»