Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
5.3. Класс TList
Класс TList используется в качестве основы для создания списков общего назначения. Кроме того, TList можно использовать как класс-контейнер для хранения в списках объектов любого типа. В большинстве случаев, чтобы использовать класс TList, необходимо создать два собственных класса: один для элементов, предназначенных для хранения в списке, а другой для самого списка.
Упражнение 5.3.1. Напишите приложение, позволяющее создавать список абонентов телефонного узла.
Решение
Создайте новый проект. Сохраните новое приложение в папке PhoneBook файл модуля под именем Main.pas, файл проекта PhoneBook. dpr.
1-й этап. Создадим визуальный интерфейс приложения (рис. 5.3.1)
Поместите на форму семь компонентов Label, четыре Edit, два SpinEdit, один Button и один MaskEdit (Addition).
Измените значения свойства Caption компонентов Label, Forml и Button 1 в соответствии с рис. 5.3.1, очистите свойство Text компонентов Edit, свойства Name компонентов установите следующим образом:
Компонент |
Свойство |
Значение |
Forml |
Name |
MainF |
Editl |
Name |
LastNameEdt |
Edit2 |
Name |
NameEdt |
Edit3 |
Name |
PatronymicEdt |
Edit4 |
Name |
StreetEdt |
SpinEditl |
Name |
HouseSE |
SpinEdit2 |
Name |
FlatSE |
Buttonl |
Name |
AddBtn |
MaskEditl |
Name |
PhoneME |
AutoSelect |
False |
|
EditMask |
!00-00-00;l;_ |
|
StatusBarl |
Panels[0].Text |
Количество записей |
Panels[0].Width |
110 |
|
Panels[l].Text |
||
Panels[l]. Width |
30 |
|
Panels[2].Text |
Номер |
|
Panels[2]. Width |
38 |
|
Panels[3].Text |
Свойство 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 в соответствии с введенными ограничениями.
Опишем два новых типа:
type
PMyList = ^AList;
AList = record;
LastName: string[25];
Name: string[25];
Patronymic: string[25];
Street: string [40];
House: integer;
Flat: integer;
Phone: string[8];
end;
В разделе private описания класса TMainF опишите переменные:
MyList: TList; {для хранения введенных записей}
ARecord: PMyList; {для формирования полей одной записи}
Yk: Integer; {указатель перемещения по записям MyList}
При запуске приложения создадим объект MyList типа TList:
procedure TMainF.FormCreate(Sender: TObject);
begin
MyList := TList.Create; {выделение памяти под объект MyList}
Yk:=-1;
end;
При завершении работы с приложением освободим память, выделенную под объект MyList:
procedure TMainF.FormDestroy(Sender: TObject);
begin
MyList.Free;
end;
Для добавления записи опишем обработчик события OnClick кнопки Добавить:
procedure TMainF.AddBtnClick(Sender: TObject);
begin
New (ARecord) ; {выделяем место под запись}
with ArecordA 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}
inc (yk) ; {увеличиваем значение указателя}
StatusBar1.Panels[1].Text:=IntToStr(MyList.Count);
{отображаем количество записей в панели статуса}
StatusBar1.Panels[3].Text:=IntToStr(yk+1);
{отображаем номер отображаемой записи в панели статуса}
end;
Эксперимент. Сохраните проект. Запустите его и попробуйте добавить в телефонную книгу информацию о себе и своем друге. Убедитесь, что в строке состояния отображается число два (количество введенных записей). ♦
Задание для самостоятельного выполнения
Дополните приложение PhoneBook
Примечание. Для обращения к полям записи воспользуйтесь операторами:
ARecord:=MyList[yk]; with ARecordA do ...
Примечание. Для удаления записи из списка необходимо выполнить следующую последовательность операторов:
ARecord := MyList.Items[В]; {В это номер удаляемой записи}
Dispose(ARecord);