Лабы Delphi / Лабораторная работа 7
.docЛабораторная работа № 7
Класс TList
Класс TList используется в качестве основы для создания списков общего назначения. Кроме того, TList можно использовать как класс-контейнер для хранения в списках объектов любого типа. В большинстве случаев, чтобы использовать класс TList, необходимо создать два собственных класса: один – для элементов, предназначенных для хранения в списке, а другой – для самого списка.
Упражнение. Напишите приложение, позволяющее создавать список телефонных абонентов.
Решение. Создайте новый проект. Сохраните новое приложение в папке PhoneBook – файл модуля под именем Main.pas, файл проекта – PhoneBook.dpr.
1 этап. Создадим визуальный интерфейс приложения
Поместите на форму семь компонентов Label, четыре Edit, два SpinEdit, один Button и один MaskEdit (Addition).
Измените значения свойства Caption компонентов Label, Form1 и Button1 в соответствии с рис. 1, очистите свойство Text компонентов Edit, свойства Name компонент установите следующим образом:
Компонент |
Свойство |
Значение |
Form1 |
Name |
MainF |
Edit1 |
Name |
LastNameEdt |
Edit2 |
Name |
NameEdt |
Edit3 |
Name |
PatronymicEdt |
Edit4 |
Name |
StreetEdt |
SpinEdit1 |
Name |
HouseSE |
SpinEdit2 |
Name |
FlatSE |
Button1 |
Name |
AddBtn |
MaskEdit1 |
Name |
PhoneME |
|
AutoSelect |
False |
|
EditMask |
!00-00-00;1;_ |
Свойство EditMask используют, чтобы обеспечить ввод данных в соответствии с заданной маской. Если пользователь вводит не совместимые с заданной маской символы, MaskEdit игнорирует их.
Для ввода номера телефона используется маска: !00-00-00;1;_
Маска состоит из трех полей, разделенных символом точка с запятой. Первая часть определяет собственно маску. Для построения маски используются специальные символы:
! |
Поле заполняется слева направо |
0 |
Цифра (0-9) или знак (+/-) обязательны |
_ |
Автоматически вставляет пробел в указанной позиции |
> |
Все символы справа от указанной позиции переводятся в верхний регистр |
< |
Все символы слева от указанной позиции переводятся в нижний регистр |
, : ; / - ( ) |
Разделители |
L |
Буква обязательна |
Примечание. Другие символы, используемые для создания маски, можно посмотреть в справочной системе Delphi.
Таким образом, поле телефон определен как шестизначный номер, цифры которого разбиваются по парам, и будут заполняться слева направо.
Вторая часть маски определяет, сохранять ли не вводимые символы как данные. Значение параметра, равное нулю, показывает, что свойство Text для примера содержит 6 символов (не вводимые символы (в примере – «-») не сохраняются). Любое другое значение параметра заставляет сохранять не водимые символы в свойстве Text (для примера свойство Text будет содержать 8 символов). В примере параметр равен единице, не вводимые символы будут сохраняться в свойстве Text.
Третья часть определяет символ, который определяет поля маски, которые необходимо заполнить. В примере – это символ «_».
2 этап. Создание программного кода
Предположим, что длина полей LastName (фамилия), Name (имя), Patronymic (отчество) не превосходит 25 символов, а Street (улица) – 40 символов. Измените свойства MaxLength компонетов Edit в соответствии с введенными ограничениями.
Опишем новый тип:
PMyList = ^AList;
AList = record
LastName: string[25];
Name: string[25];
Patronymic: string[25];
Street: string[40];
House: integer;
Flat: integer;
Phone: string[8];
End;
Для решения поставленной задачи необходимо описать переменные:
Var MyList: TList; {для хранения введенных записей}
ARecord: PMyList; {для формирования полей одной записи}
Опишем последовательность действий по добавлению элементов в список:
* первоначальные действия:
MyList := TList.Create; {выделение памяти под объект MyList}
* действия при добавлении каждого элемента:
New(ARecord); {выделяем место под запись}
with Arecord^ do begin {заполняем поля записи}
LastName:=LastNameEdt.text;
Name:=NameEdt.text;
Patronymic:= PatronymicEdt.text;
Street:=StreetEdt.text;
House:=HouseSE.value;
Flat:=FlatSE.value;
Phone:= PhoneME.text;
end;
MyList.Add(ARecord); {добавляем запись в объект MyList}
* действия по освобождению памяти:
MyList.free;
Задания для самостоятельного выполнения
I. Модификации:
-
При добавлении элементов в список возможны различные исключительные ситуации. Напишите обработчики необходимых исключительных ситуаций.
-
Дополните приложение кнопками для перемещения по записям списка.
-
Сохранить список в файле.
-
Опишите процедуру поиска записей по фамилии и вывода найденных записей в диалоговое окно.
-
Добавить в список абонента, сохранить изменения в файле.
-
Удалить абонента из списка, сохранить изменения в файле.