

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
Лабораторная работа № 17
Стандартные компоненты. TMemo. TListBox. TComboBox.
Введение
В лабораторной работе рассмотрены компоненты TListBox, TComboBox, TMemo. Приведены примеры программ использующие эти компоненты. Также рассмотрена функция MessageBox для вывода стандартных окон сообщений.
Компонент TListBox
Компонент TListBox находится на вкладке Standart палитры компонентов (рисунок 1).
Рисунок 1 – Расположение компонента TListBox в палитре компонентов
Компонент TListBox представляет собой стандартный для Windows список, с помощью которого пользователь может выбрать один или несколько пунктов. В компоненте предусмотрена возможность программной прорисовки пунктов, поэтому список может содержать не только текстовые строки, но и произвольные изображения. Некоторые свойства компонента TListBox перечислены в таблице 1.
Таблица 1 – Свойства компонента TListBox
Свойство |
Описание |
property AutoComplete: Boolean; Если содержит значение True, выбранный элемент в списке заменяется на тот, начальные 6уквы которого вводит пользователь
type TBorderStyle = bsNone .. bsSingle; Определяет стиль рамки: bsNone – нет рамки; property BorderStyle: TBorderStyle; bsSingle – рамка толщиной 1 пиксел
property Canvas: TCanvas;
property Columns: LongInt;
property ExtendedSelect: Boolean;
property IntegralHeight: Boolean;
property ItemHeight: Integer;

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
Свойство |
Описание |
|
|
|
|
property ItemIndex: Integer; |
Содержит индекс элемента, имеющего фокус |
|
|
ввода. Если MultiSelect=False, совпадает индексом |
|
|
выделенного пункта. Если не выделен ни один |
|
|
элемент, то содержит отрицательное значение |
|
property Items: TStrings; |
Содержит набор строк, показываемых в |
|
|
компоненте |
|
property MultiSelect: Boolean; |
Разрешает/отменяет возможность выбора не |
|
|
скольких пунктов |
|
property SelCount: Integer; |
Содержит количество выбранных пунктов |
|
property Selected[X: Integer]: Boolean; |
Содержит признак выбора для элемента с |
|
|
индексом X (первый элемент имеет индекс 0) |
|
property Sorted: Boolean; |
Разрешает/отменяет сортировку строк в |
|
|
алфавитном порядке |
|
type TListBoxStyle = (lbStandard, |
Определяет способ прорисовки элементов: |
|
lbOwnerDrawFixed, |
− lbStandard – элементы рисует Windows; |
|
lbOwnerDrawVariable); |
||
− lbOwnerDrawFixed – рисует программа все |
||
property Style: TListBoxStyle; |
||
элементы имеют одинаковую высоту |
||
|
определяемую свойством ItemHeight; |
|
|
− lbOwnerDrawVariable – рисует программа |
|
|
элементы имеют разную высоту. |
|
property TabWidth: Integer; |
Задает ширину табуляционного пробела |
|
property TopIndex: Integer; |
Индекс первого видимого в окне пункта списка |
|
|
|
Создание элементов (пунктов) списка компонента реализуется с помощью методов его свойства Items – Add, Append, Insert или LoadFromFile.
Обратите внимание, что свойство ItemIndex в компоненте TListBox содержит индекс элемента списка, имеющего фокус, ввода, и не меняется при изменении списка методами
Add, Append, Insert.
Рассмотрим несколько примеров использования компонента TListBox.
Добавьте на форму (frmList) компонент TListBox (lsbList), TEdit (edtStr) и два компонента TButton (btnAdd, btnRemove)1. Установите свойства компонентов согласно таблице 2.
Таблица 2 – Свойства компонентов
Свойство |
frmList |
btnAdd |
btnRemove |
|
|
|
|
Caption |
Список |
Добавить |
Удалить |
|
|
|
|
Разместите компоненты на форме как показано на рисунке 2.
1 В скобках приведены имена соответствующих компонентов.

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
Рисунок 2 – Вид формы после добавления компонентов
Создайте обработчик события для кнопки «Добавить» (см. Листинг 1).
Листинг 1
procedure TfrmList.btnAddClick(Sender: TObject); begin
//добавить строку в конец списка строк lsbList.Items.Add(edtStr.Text);
end;
В данном обработчике для добавления строки в список используется метод Add класса TStrings (см. лабораторную работу № 11). Этот метод добавляет новую строку в конец списка.
Создайте обработчик события для кнопки «Удалить » (см. Листинг 2).
Листинг 2
procedure TfrmList.btnRemoveClick(Sender: TObject); begin
//удалить выделенный элемент lsbList.DeleteSelected;
end;
Откомпилируйте и запустите программу.
Модифицируем программу приведенную выше. Разместите на форме компонент TLabel (lbInfo) как показано на рисунке 3.
Рисунок 3 – Вид формы после добавления метки
Создайте для компонента lsbList обработчик события OnClick (см. Листинг 3).
Листинг 3
procedure TfrmList.lsbListClick(Sender: TObject); begin
lbInfo.Caption:=lsbList.Items[lsbList.ItemIndex];
end;

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
Код приведенной выше подпрограммы отображает содержимое текущего выделенного элемента списка на метку lbInfo.
Добавьте обработчик события OnCreate для формы frmList. Это событие происходит сразу после создания формы, перед ее появлением на экране (см. Листинг 4).
Листинг 4
procedure TfrmList.FormCreate(Sender: TObject); begin
lbInfo.Caption:='';
edtStr.Text:='';
end;
В этом обработчике события присваиваются начальные значения некоторым свойствам компонентов. Запустите программу. При выделении элементов списка их содержимое будет отображаться в компоненте lbInfo. Обратите внимание, что содержимое метки будет также изменяться при перемещении по пунктам списка при помощи клавиатуры.
Расширим функциональность программы, добавив функцию переупорядочивания элементов списка2, а именно две новых кнопки «переместить элемент на одну позицию вверх» и «переместить элемент на одну позицию вниз».
Добавьте на форму две кнопки TButton (btnUp, btnDown). Расположите компоненты на форме как показано на рисунке 4.
Рисунок 4 – Вид формы после добавления дополнительных компонентов
Создайте для кнопок обработчики событий нажатия на кнопки (см. Листинг 5). Для изменения порядка элементов списка используется метод Exchange класса TStrings, который имеет следующий синтаксис
procedure Exchange(Index1, Index2:Integer)
где Index1, Index2 – индексы меняемых местами строк в списке.
Листинг 5
procedure TfrmList.btnUpClick(Sender: TObject); begin
// если текущий элемент не первый в списке if lsbList.ItemIndex>0 then lsbList.Items.Exchange(lsbList.ItemIndex,
lsbList.ItemIndex-1);
end;
2 Подобной функциональностью обладает окно «Edit Tab Order» рассмотренное в предыдущей лабораторной работе.

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
procedure TfrmList.btnDownClick(Sender: TObject); begin
// если текущий элемент не последний в списке if lsbList.ItemIndex<>lsbList.Count-1 then lsbList.Items.Exchange(lsbList.ItemIndex,
lsbList.ItemIndex+1);
end;
Обратите внимание, что при попытке обменять местами строки с несуществующими индексами возникнет исключительная ситуация EStringListError.
Запустите программу, проверьте ее работоспособность.
Рассмотрим еще один пример работы с компонентом TListBox. Поместите на форму еще один компонент TListBox (lsbSecondList) и три кнопки TButton (btnMoveLR, btnMoveRL, btnExit).
Установите свойства компонентов согласно таблице 3.
Таблица 3 – Свойства компонентов
Свойство |
btnMoveLR |
btnMoveRL |
btnExit |
|
|
|
|
Caption |
--> |
--> |
Выход |
|
|
|
|
Расположите компоненты на форме как на рисунке 5.
Рисунок 5 – Вид формы после добавления компонентов
При нажатии кнопки выделенные элементы из расположенного слева компонента
TListBox (lsbList) будут переносится в правый (lsbSecondList). При нажатии кнопки
выделенные элементы из расположенного права компонента TListBox (lsbSecondList) будут переносится в левый (lsbList). При нажатии на кнопку «Выход» программа будет завершать свою работу.
Перенос элементов из одного списка в другой осуществляется с помощью метода MoveSelection компонента TListBox, имеющего следующий синтаксис
procedure MoveSelection(Destination: TCustomListControl);
где Destination – компонент, в который необходимо переместить выделенные элементы списка.
Ниже приведены обработчики событий OnClick для всех трех кнопок.
Листинг 6
procedure TfrmList.btnMoveLRClick(Sender: TObject);