БАЛТИЙСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ “ВОЕНМЕХ” им. Д. Ф.УСТИНОВА
Кафедра И5
Лабораторная работа №4
по учебной дисциплине: «Визуальное программирование»
на тему «Потоки. Сериализация. Компонент TreeView»
Вариант № 2
студента
группы И-512
Преподаватель
/ /
« » 2013г.
САНКТ-ПЕТЕРБУРГ
2013
Содержание
1. Постановка задачи……………………………………………………………3
2. Содержание форм…………………………………………………………….4
3. Описание работы программы………………………………………………..6
Заключение………………………………………………………………………7
Приложение. Исходные тексты программы…………………………………8
1 Постановка задачи
Цель работы – научиться эффективно использовать потоки, применять компонент TreeView; освоить сериализацию.
В соответствии с индивидуальным вариантом, написать программу, позволяющую манипулировать каталогами и файлами. Пользователь вводит путь к диалогу, содержимое которого будет впоследствии выведено на экран. Реализовать сериализацию.
2 Содержание формы
type
{ TTree }
TTree = class(TForm)
Add: TButton;
AddChild: TButton;
Load: TButton;
Save: TButton;
Delete: TButton;
Rename: TButton;
Read_way: TButton;
Way: TEdit;
TreeView1: TTreeView;
procedure AddChildClick(Sender: TObject);
procedure AddClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure DeleteClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure LoadClick(Sender: TObject);
procedure Read_wayClick(str:string; Node: TTreeNode);
procedure RenameClick(Sender: TObject);
procedure SaveClick(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Tree: TTree;
way_str : string;
Основной класс программы отвечает за реализацию класса дерева. С помощью дерева, осуществляется вывод нашего каталога, перемещение. Благодаря TreeView1 осуществляется вывод каталога.
3 Описание работы программы
При запуске программы пользователь видит панель, состоящую из диалогового окна и кнопками управления. Он имеет возможность создать свое дерево, со своей иерархией, а так же загрузить каталог файлов операционной системы. Управление каталогом осуществляется благодаря набору кнопок. Пользователь имеет возможность добавлять, как просто элемент, или же, добавлять дочерний элемент к данному выделенному элементу. Программа включает в себя возможности переименованием и удаление любого узла дерева. При этом, удаляя какой либо из узлов, удаляется вся вложенность, то есть удаляются все дочерние узлы.
В данной программе присутствует, как процесс сохранения состояния во внешнюю среду, так и процесс восстановления из внешней среды. За это отвечают соответствующие кнопки. Сериалиция и десериализация в данной программе являются высокоуровневыми. Сохранение состояние происходит путем записи в файл.
Все о чем было сказано выше, доступно пользователю благодаря компоненту TreeView. Именно этот компонент выводит пользователю всю информацию с каталогами, благодаря нему, пользователь может, выделяя узел увидеть и изменить данные. Увидеть ранее сохраненную информацию.
Каждый элемент из списка элементов (узлов) TreeView, является объектом типа TTreeNode. Соответственно, каждый узел если имеет дочерний компонент, то он тоже является компонентом TTreeNode. И с помощью клика мышкой пользователь разворачивает/сворачивает данный узел.
Заключение
В ходе выполнения данной лабораторной работы были получены навыки работы с потоками, сериализицией(десериализацией), компонентами TreeView.
Приложение. Исходные тексты программы
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
StdCtrls;
type
{ TTree }
TTree = class(TForm)
Add: TButton;
AddChild: TButton;
Load: TButton;
Save: TButton;
Delete: TButton;
Rename: TButton;
Read_way: TButton;
Way: TEdit;
TreeView1: TTreeView;
procedure AddChildClick(Sender: TObject);
procedure AddClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure DeleteClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure LoadClick(Sender: TObject);
procedure Read_wayClick(str:string; Node: TTreeNode);
procedure RenameClick(Sender: TObject);
procedure SaveClick(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Tree: TTree;
way_str : string;
implementation
{$R *.lfm}
{ TTree }
procedure TTree. Read_wayClick(str:string; Node: TTreeNode);
var
SR : TSearchRec;
NewNode : TTreeNode;
FindRes : integer;
tmp :string;
f:integer;
begin
f:=FindFirst(str, faDirectory, SR);
tmp:=str;
SetLength(tmp, Length(tmp)-4);
NewNode:=TreeView1.Items. AddChild(Node, tmp);
if (f = 0) then
while (f = 0) do
begin
if ((SR. Name <> '.') and (SR. Name <> '..')) then
begin
tmp:=str;
//ShowMessage('str: ' + str + #13+'srn: '+ SR. Name);
SetLength(tmp, Length(tmp)-3);
Read_wayClick(tmp+SR. Name+'\*.*', NewNode);
end;
f:=FindNext(SR);
end;
end;
procedure TTree. RenameClick(Sender: TObject);
Var
CaptionStr : string;
begin
CaptionStr:=''; // Name new element
if not InputQuery('Вводи имени','Введите заголовок элемента',CaptionStr) then exit;
TreeView1.Selected. Text := CaptionStr;
end;
procedure TTree. SaveClick(Sender: TObject);
begin
TreeView1.SaveToFile(ExtractFilePath(Application. ExeName)+'file. dat');
end;
procedure TTree. AddClick(Sender: TObject);
Var
CaptionStr : string;
NewNode : TTreeNode;
begin
CaptionStr:=''; // Name new element
if ((not InputQuery ('Ввод имени', 'Введите заголовок элемента', CaptionStr)) ) then exit;//Вывод окна ввода
NewNode:=TreeView1.Items. Add(TreeView1.Selected, CaptionStr); // Добавляем элемент в дерево.
if (NewNode. Parent <> nil) then
NewNode. ImageIndex:=1;
end;
procedure TTree. Button1Click(Sender: TObject);
var
NewNode: TTreeNode;
tmp:string;
begin
NewNode:=TreeView1.Items. Add(TreeView1.Selected,'Мой компьютер');
Read_wayClick(Way. Text, NewNode);
end;
procedure TTree. DeleteClick(Sender: TObject);
begin
if TreeView1.Selected <> nil then
TreeView1.Items. Delete(TreeView1.Selected);
end;
procedure TTree. FormCreate(Sender: TObject);
begin
end;
procedure TTree. LoadClick(Sender: TObject);
begin
if FileExists(ExtractFilePath(Application. ExeName)+'file. dat') then
TreeView1.LoadFromFile(ExtractFilePath(Application. ExeName)+'file. dat');
end;
procedure TTree. AddChildClick(Sender: TObject);
Var
CaptionStr : string;
NewNode : TTreeNode;
begin
CaptionStr:=''; // Name new element
if not InputQuery ('Ввод подэлемента', 'Введите заголовок подэлемента', CaptionStr) then exit;//Вывод окна ввода
NewNode:=TreeView1.Items. AddChild(TreeView1.Selected, CaptionStr); // Добавляем элемент в дерево.
if (NewNode. Parent <> nil) then
NewNode. ImageIndex:=1;
end;
end.


