Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

MemListResult.Lines.Add('ЗАДАЙТЕ НОМЕР УЗЛА





Структура проекта

Пример :предлагаемый проект (Project1) включает в себя два модуля Unit1 и Unit2. Первый модуль (Unit1) обеспечивает интерфейс в виде оконной формы (приложение Form1). Второй модуль (Unit2) – это набор методов (процедур) редактирования списка (приложение Unit.pas).

Вид оконного интерфейса представлен на рис.12.

Рис.12. Вид оконного интерфейса

Название и назначение компонент размещенных на оконной форме:

- Memo1 (отображение протокола работы по редактированию списка: запросы, сообщения, вывод результата);

- 7 кнопок Button (вызов процедур-методов редактирования списка из модуля Unit2);

- 3 окна ввода данных Edit (заполнение информационных полей каждого узла);

- 1 окно ввода номера узла Edit (либо номера узла списка, который следует найти, либо номера узла списка после которого следует добавить новый, либо удалить старый);

- 6 информационных надписей - меток Label.

 

 

Модуль оконной формы.

Интерфейсная часть модуля Unit1 имеет следующий вид:

 

unit Unit1;

Interface

Uses

Windows, Messages, SysUtils, Variants, Classes, Graphics,

Controls, Forms,Dialogs, StdCtrls,Unit2;

Type

TForm1 = class(TForm)

btnDeleteList: TButton;

lblListResult: TLabel;

lblVvodData: TLabel;

edtName: TEdit;

edtMarka: TEdit;

edtNumber: TEdit;

lblName: TLabel;

lblMarka: TLabel;

lblNumber: TLabel;

memListResult: TMemo;

btnCreate: TButton;

btnPrintFirst: TButton;

lblInformation: TLabel;

btnSearchNode: TButton;

lblNodeNumber: TLabel;

edtNodeNumber: TEdit;

btnAddAfterNode: TButton;

btnDeleteNode: TButton;

btnPrintLast: TButton;

procedure btnDeleteListClick(Sender: TObject);

procedure edtNameKeyPress(Sender: TObject;

var Key: Char);

procedure edtMarkaKeyPress(Sender: TObject;

var Key: Char);

procedure edtNumberKeyPress(Sender: TObject;

var Key: Char);

procedure btnCreateClick(Sender: TObject);

procedure btnPrintFirstClick(Sender: TObject);

procedure btnSearchNodeClick(Sender: TObject);

procedure edtNodeNumberKeyPress(Sender: TObject;

var Key: Char);

procedure btnAddAfterNodeClick(Sender: TObject);

procedure btnDeleteNodeClick(Sender: TObject);

procedure btnPrintLastClick(Sender: TObject);

Private

{ Private declarations }

Public

{ Public declarations }

end;

Var

Form1: TForm1;

memo1: TMemo;

 

В таблице 6 приведены свойства основных компонентов:

 

Таблица 6

 

Объект Свойство Значение
Button1   Button2   Button3   Button4   Button5   Button6   Button7   Memo1 Edit1 Edit2 Edit3 Edit4 Label1   Label2   Label3   Label4   Label5   Label7 Caption Name Caption Name Caption Name Caption Name Caption Name Caption Name Caption Name Name Name Name Name Name Caption Name Caption Name Caption Name Caption Name Caption Name Caption Name Удалить список BtnDeleteNode Построить список BtnCreate Печать списка сначала BtnPrintFirst Найти узел по номеру BtnSearchNode Добавить узел в середину BtnAddAfterNode Удалить узел из середины BtnDeleteNode Печать списка с конца BtnPrintLast MemListResult EdtName EdtMarka EdtNumber EdtNodeNumber Протокол работы LblListResult Ввод данных LblVvodData Имя EdtName Марка EdtMarka Номер LblNumber Задайте номер узла LblNodeNumber

 



Как видно из текста интерфейсной части модуля Unit1 в нем присутствуют процедуры-обработчики событий (Events) таких, как нажатие кнопок ButtonClick. Так при нажатии кнопки «Удалить список», как показано ниже, внутри процедурыbtnDeleteListClick обработчика этого события выполняется вызов процедурыDisposeSpisokиз модуля Unit2 :

procedure TForm1.btnDeleteListClick( Sender: TObject);

Begin

DisposeList;

memListResult.Lines.Add('СПИСОК УДАЛЕН');

end;

 

Одновременно с этим, в окно компонента Memo1эта же процедура выдает сообщение о том, что список удален. Аналогичным образом при нажатии кнопки «Построить список», процедура-обработчик btnCreateClickобеспечивает вызов процедурыCreateListтакжеиз модуля Unit2иона же выдает на панель диалогового окна (Form1) сообщение о количестве узлов построенного списка через свойство компонента-метки lblInformation.Caption(как показано ниже).

procedure TForm1.btnCreateClick(Sender: TObject);

Begin

CreateList;

lblInformation.Caption:='Число узлов в списке='

+IntToStr(L.Count);

end;

 

Следует отметить, что прежде чем создавать список, необходимо заполнить массив записей в каждый элемент которого заносится информация по одному владельцу автомобиля. Описание этого массива выполнено в модуле Unit2:

type TA=record { Автомобиль }

M: String[15]; { Ф.И.О. владельца }

N: String[10]; { Марка }

W: String[14]; { Номер }

end;

var a:array[1..10] of TA;

 

Массив «a» выполняет роль информационного буфера из которого будет выбираться информация при построении нового списка или при добавлении узла в существующий список.

Информация заносится в разделе ввода данных через окна компонент Edit1,Edit2,иEdit3по нажатию клавиши «Enter»по завершению ввода в каждом окне. После ввода имени владельца в первом окне и нажатия клавиши «Enter»будет вызвана процедура-обработчик события нажатия клавиши edtNameKeyPress.С ее помощью будет заполнено поле «М» текущего элемента массива «а»:

procedure TForm1.edtNameKeyPress(Sender: TObject;

var Key: Char);

Begin

if key=#13 then

Begin

if key1=0 then

lblInformation.Caption:='Число узлов в списке=0';

ind:=ind+1;

memListResult.Lines.Clear;

a[ind].M:=edtName.Text;

memListResult.Lines.Add(IntToStr(ind));

edtMarka.SetFocus;

end;

end;

Через свойство компонента-метки lblInformation.Captionна панель диалогового окна будет выдано сообщение о том, что число узлов в списке равно «0», а курсор будет позиционирован в поле (окно) компонентаEdit2. После ввода марки автомобиля и нажатия клавиши «Enter» будет вызвана процедура-обработчик нажатия клавиши edtMarkaKeyPress, которая заполнит поле «N» текущего элемента массива «а» и позиционирует курсор в поле (окно) компонентаEdit3:

procedure TForm1.edtMarkaKeyPress(Sender: TObject;

var Key: Char);

Begin

if key=#13 then

Begin

a[ind].N:=edtMarka.Text;

edtNumber.SetFocus;

end;

end;

 

После ввода номера автомобиля и нажатия клавиши «Enter» будет вызвана процедура-обработчик нажатия клавишиedtNumberKeyPress, которая заполнит поле «W» текущего элемента массива «а» и позиционирует курсор в поле (окно) компонентаEdit1:

procedure TForm1.edtNumberKeyPress(Sender: TObject;

var Key: Char);

Begin

if key=#13 then

Begin

a[ind].W:=edtNumber.Text;

edtName.SetFocus;

if (t>0) and (t<L.Count) and (key1=2) then

Begin

AddAfterNode;

lblInformation.Caption:='Число узлов в списке='

+IntToStr(L.Count);

memListResult.Lines.Add('...УЗЕЛ ДОБАВЛЕН...');

memListResult.Lines.Add('');

end;

end;

end;

Вернемся к обзору функциональных кнопок на нашей экранной форме (Form1). Так при нажатии кнопки «Печать списка сначала», как показано ниже, процедура btnPrintFirstClick, выдаст сообщение в виде заголовкав окно компоненты Memo1,эта же процедура обеспечит вызов процедурыPrintFirstиз модуля Unit2.

procedure TForm1.btnPrintFirstClick(Sender: TObject);

Begin

memListResult.Lines.Add('');

memListResult.Lines.Add('*** ПЕЧАТЬ СПИСКА

ПРЯМАЯ***');

PrintFirst(memListResult.lines);

if L.Count=0 then

memListResult.Lines.Add('...СПИСОК ПУСТ...');

memListResult.Lines.Add('');

lblInformation.Caption:='Число узлов в списке='

+IntToStr(L.Count);

end;

Однако, печать сработает только в том случае, если список не пуст. В процедуре присутствует параметр-счетчик узлов L.Countпри нулевом значении которого, будет выдано сообщение о том, что список пуст. Значение параметра определяется в модуле Unit2. В любом случае будет обновлено сообщение о количестве узлов списка через свойство компонента-меткиlblInformation.Caption ,как это и делалось ранее.

При нажатии кнопки «Найти узел по номеру», как приведено ниже, процедура btnSearchNodeClickс помощью метода SetFocusпозиционирует курсор в поле (окно) компонента Edit4. Одновременно с этим в окно компонента Memo1будет выдан запрос:'ЗАДАЙТЕ НОМЕР УЗЛА, КОТОРЫЙ СЛЕДУЕТ ОПРЕДЕЛИТЬ', исходя из этого в поле (окно) компонента Edit4следует ввести номер узла содержание информационных полей которого мы хотели бы просмотреть.

procedure TForm1.btnSearchNodeClick(Sender: TObject);

Begin

edtNodeNumber.SetFocus;

key1:=1;

memListResult.Lines.Clear;

memListResult.Lines.Add('ЗАДАЙТЕ НОМЕР УЗЛА

КОТОРЫЙ');

memListResult.Lines.Add('СЛЕДУЕТ ОПРЕДЕЛИТЬ');

memListResult.Lines.Add('');

end;

 

После чего следует нажать клавишу «Enter», что приведет к вызову процедуры обработчика этого событияedtNodeNumberKeyPress.Если номер узла определен в пределах нумерации списка и ключ-параметрkey1равен 1, а это значение было назначено в процедуреbtnSearchNodeClick, то произойдет вызов процедуры поиска узла по номерус именем SearchNode из модуля Unit2. Текст процедуры edtNodeNumberKeyPressприведен ниже.





Рекомендуемые страницы:

Воспользуйтесь поиском по сайту:



©2015- 2021 megalektsii.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.