На этом шаге мы рассмотрим компонент TComboBox
Компонент TComboBox (Комбинированный список) представляет собой вариант списка с присоединенным дополнительным полем, в котором отображается выбранный элемент списка. Это же поле может использоваться для ввода новых элементов или для быстрого поиска элемента по начальным символам. Если на экране отображается только поле без списка, то для раскрытия списка можно использовать комбинацию клавиш Alt+вниз, а для выбора элемента списка используются клавиши перемещения (клавиши со стрелками).
Компонент TComboBox работает в пяти разных режимах, определяемых значением свойства Style.
Перечислим возможные значения свойства Style компонента TComboBox.
Значение | Механизм работы списка |
---|---|
csDropDown | Создается раскрывающийся список с возможностью редактирования. Свойство MaxLength определяет максимально допустимое число символов, которое можно ввести в это поле (значение 0 указывает на отсутствие ограничений). Текст, введенный пользователем, доступен с помощью свойства Text |
csDropDownList | Создается раскрывающийся список только для выбора значений, уже имеющихся в списке |
csSimple | Отличается от стиля csDropDown только тем, что список не является раскрывающимся |
csOwnerDrawFixed | Создается раскрывающийся список только для выбора значений с возможностью оформления пользователем |
csOwnerDrawVariable | Создается раскрывающийся список только для выбора значений с возможностью оформления пользователем. Элементы могут иметь разную высоту |
Вводимый текст может автоматически преобразовываться к верхнему регистру (если свойство CharCase имеет значение ecUpperCase), к нижнему (ecLowerCase) или никак не преобразовываться (ecNormal по умолчанию).
Максимальное число элементов, одновременно отображаемых в видимой части списка, задается в свойстве DropDownCount. Чтобы открыть список из программы, свойству DroppedDown (Раскрыть) надо присвоить значение True.
Понятия выделенная строка в раскрывающемся списке нет. В нем имеется только текущая выбранная строка (ее номер в списке хранится в свойстве ItemIndex). Соответственно нельзя и выделять строки списка. Единственный метод, связанный с выделением данных, - это процедура SelectAll, которая выделяет весь текст, введенный пользователем в присоединенное поле. При работе с раскрывающимся списком наиболее важными являются перечисленные ниже события.
Перечислим основные события компонента TComboBox.
Название | Условия генерации |
---|---|
OnChange | Пользователь изменил текст в присоединенном поле |
OnDropDown | Список раскрывается. Это событие необходимо обрабатывать, если содержимое списка может меняться во время работы программы. Тогда в обработчике этого события можно заново сформировать содержимое списка (свойство Items). |
Пример программы с использованием поля со списком приведен ниже, а результат ее выполнения показан на рис. 1, где выбранный элемент отображается на надписи.
Поместите на форму компоненты: Label1, ComboBox1. Для Form1 создайте обработчик OnCreate:
procedure TForm1.FormCreate(Sender: TObject); var i:Integer; begin for i:=0 to 5 do ComboBox1.Items.Add ('Элемент '+IntToStr(i)); end;
Для компонента ComboBox1 - обработчик OnSelect:
procedure TForm1.ComboBox1Select (Sender: TObject); var i:Integer; begin i:=ComboBox1.ItemIndex; Label1.Caption:=ComboBox1.Items.Strings[i]; end;
Если вы все сделали правильно, то у вас получится следующее:
Рис.1.Компонент TComboBox
Приведем текст программы
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class (TForm) ComboBox1: TComboBox; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure ComboBox1Select(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i:Integer; begin for i:=0 to 5 do ComboBox1.Items.Add ('Элемент '+IntToStr(i)); end; procedure TForm1.ComboBox1Select (Sender: TObject); var i:Integer; begin i:=ComboBox1.ItemIndex; Label1.Caption:=ComboBox1.Items.Strings[i]; end; end.
На следующем шаге мы рассмотрим компонент TScrollBar