Memlistresult. Lines. Add('задайте номер узла
Стр 1 из 3Следующая ⇒ Структура проекта Пример: предлагаемый проект (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
Как видно из текста интерфейсной части модуля 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 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|