БАЛТИЙСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ

УНИВЕРСИТЕТ “ВОЕНМЕХ” им. Д. Ф.УСТИНОВА

Кафедра И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.