logo
Методичка_Delphi_Ч1

Процедуры обработки событий выбора из списка

Событие выбора из списка происходит тогда, когда путем нажатия на левую кнопку мыши осуществляется выбор строки списка. Такое же событие происходит, когда с помощью клавиш управления курсором осуществляется переход к последующей или предыдущей стоке списка. Имя этого события – onClick.

Процедуры обработки события onClick для списков - это процедуры с разветвлениями. В этих процедурах выполняемые действия зависят от выбора строки списка. Возможны различные способы организации этих процедур.

Первый способ состоит в том, что для выбора используется номер выбранной строки, доступ к которому возможен через свойство списка ItemIndex. Для организации разветвлений в процедуре в этом случае можно использовать инструкцию case, в которой будет анализироваться номер выбранной строки. Ниже приведен фрагмент тела процедуры, в котором реализован такой подход для задания значений коэффициентов квадратного уравнения в зависимости от выбранного варианта контрольного примера.

case lstVariant.ItemIndex of

0: //вещественные корни

setKoef(0.5,3,2.5);

1: //комплексные корни

setKoef(0.25,3,25);

2: //чисто мнимые корни

end;

Недостаток такого подхода состоит в том, что при изменении порядка следования строк в списке, процедура будет работать неправильно. Кроме того, анализировать работу процедуры без комментариев сложно. Но достоинство способа в том, что строки можно корректировать, это не повлияет на работу процедуры

Другой способ состоит в том, что процедура анализирует строки списка. Доступ к выбранной строке возможен через свойство Items списка, которое возвращает массив строк списка, и индекс выбранной строки ItemIndex. В этом случае инструкция case неприменима, так как строка не относится к порядковым типам. Поэтому для организации разветвлений используется цепочка операторов if.

Ниже приведен фрагмент тела процедуры, которая решает задачу, подобную той, что была рассмотрена выше.

var text:String;

begin

text := lstVariant.Items[lstVariant.ItemIndex];

if text='Вещественные корни'

then setKoef(0.5, 3, 2.5)

else if text='Комплексные корни'

then setKoef(0.25, 3, 25)

…;

end;

Достоинство этого способа в том, что здесь отпадает необходимость писать комментарии. Недостаток же в том, что если строка списка изменится, процедура перестанет работать правильно.

Создайте шаблон процедуры обработки события onClick для списка lstVariant и напишите тело процедуры одним из рассмотренных выше способов. Коэффициенты, обеспечивающие получение требуемого варианта подберите сами.

Процедуру setKoef мы уже использовали в предыдущей работе, подобную процедуру следует написать и в данном проекте.

Проверьте работу созданных процедур.