
- •1. Теоретическая часть.
- •2. Практическая часть.
- •2.2. Учимся аккуратности.
- •2.3. Добавляем демонстрационные объекты.
- •2.4. Организация хранения с данных.
- •2.5. Готовимся к программированию.
- •2.6. Программируем переключатели.
- •2.7. Программируем раскрывающийся список.
- •2.8. Начальная установка.
- •2.9. Программа готова.
2.5. Готовимся к программированию.
Самая трудная часть программы связана с выбором переключателя. Основное событие для переключателей – это включение (Click). Оно возникает при включении любого переключателя в группе, причем неважно, как это сделано: щелчком мыши или нажатием клавиш ENTER или ПРОБЕЛ. Процедура для обработки этого события вызывается также при нажатии курсорных клавиш.
Чтобы создать эту процедуру, дважды щелкните на любом из переключателей, хотя лучше все-таки на первом. Мы используем эту процедуру для обработки любого из переключателей. Но нам надо знать, какой переключатель установлен, а для этого придется исследовать объект Sender, который передается в процедуру обработки.
procedure TForm1. RadioButton1Click (Sender: TObject);
begin
End;
– Что это за объект? – Тот самый, что вызвал события, то есть в нашем случае только что установленный переключатель.
– Что нам надо сделать? – Несколько дел: во-первых заполнить раскрывающийся список нужными названиями городов, во-вторых, выбрать в списке первый пункт, в третьих, показать нужную картинку.
Самое трудное здесь – первая операция, потому что для этого надо знать, какой переключатель был установлен. Мы получаем его как объект Sender, но уточнить, о каком именно переключателе идет речь, мы должны сами. Например, можно было бы сверить положение элемента управления или его подпись, но все это трудоемкие и не очень удобные операции.
Если бы мы могли как-нибудь маркировать наши переключатели, чтобы сразу выяснить, какой из них выбран... Если бы у них было «лишнее» свойство...
Такое свойство есть у всех компонентов системы Delphi. Это специальное свойство Tag (Тег). Оно никогда не используется внутри системы Delphi и создано специально для того, чтобы программист мог использовать его для передачи дополнительных данных.
Слово Tag переводится с английского как «ярлык» или «этикетка» В программировании, когда речь идет о пометке или разметке его обычно не переводят, а просто записывают русскими буква ми: «тег».
Значение свойства Tag (Тег) – целое число. Конечно, можно было бы просто пронумеровать наши переключатели, но можно сделать еще лучше.
Первому переключателю соответствуют названия городов с 0 по 4, второму – с 5 по 9 и так далее. Пятому переключателю соответствуют значения с 20 по 24. В качестве значения свойства Tag (Тег) мы используем номер первого из нужных элементов. Это позволит нам быстро выяснить, какие именно пункты надо занести в раскрывающийся список.
Итак, с помощью Инспектора объектов дадим свойству Tag (Тег) для первого переключателя значение 0, для второго – 5, для третьего – 10, для четвертого – 15, для пятого – 20. Вот теперь можно приступать к программированию.
2.6. Программируем переключатели.
Мы уже создали заготовку процедуры RadioButton1Click. Она должна вызываться при установке любого переключателя. Поэтому прежде чем добавлять в нее какие-либо операторы, мы воспользуемся вкладкой Events (События) Инспектора объектов, чтобы назначить ее для обработки события OnClick (При щелчке) всех переключателей.
Вернемся в окно кода и приступим к написанию программы. Что должно произойти, когда один из переключателей установлен? Содержимое раскрывающегося списка должно измениться так, чтобы соответствовать выбранной части света. Старое содержимое должно удалиться, а на его место должны скопироваться нужные пункты из невидимого списка. После этого программа должна выбрать первый пункт раскрывающегося списка и показать соответствующую ему картинку.
Давайте приступим к реализации этого плана. Очистить раскрывающийся список можно с помощью метода Clear.
ComboBox1.Clear;
Теперь надо сформировать новое содержимое списка. Мы знаем, что в него должны войти пять пунктов из невидимого списка ListBox1. Номер первого добавляемого пункта определяется свойством Tag (Тег) объекта Sender.
Это значение понадобится нам и тогда, когда пользователь выберет название города из раскрывающегося списка. Поэтому стоит запомнить его в свойстве Tag (Тег) самого раскрывающегося списка. Но если мы просто напишем:
ComboBox1.Tag := Sender.Tag;
то система Delphi выдаст нам сообщение об ошибке. Почему так произойдет? Потому что мы-то знаем, что объект Sender – это обязательно переключатель, а для системы Delphi это сейчас просто какой-то объект, у которого может и не быть свойства Tag (Тег).
Нам надо явно указать, что система должна считать этот объект переключателем. Для этого нужно указать тип объекта после ключевого слова as. Оператор присваивания запишется так:
ComboBox1.Tag: = (Sender as TRadioButton).Tag;
Теперь нужно скопировать пять элементов, начиная с нужного, из списка ListBox1 в раскрывающийся список. ComboBox1. Это удобнее всего сделать при помощи цикла:
For i:=0 to 4 do
ComboBox1.Items.Аdd (ListBox1.Items[ComboBox1.Tag+i ]);
Нам пришлось использовать переменную цикла i, которую надо описать. Добавим перед оператором begin строку:
var i: integer;
Теперь осталось программно выбрать первый элемент раскрывающегося списка и показать картинку, соответствующую этому элементу. Это можно сделать при помощи таких операторов:
ComboBox1.ItemIndex := 0;
Imagel.Picture.LoadFromFile(ListBox2.Items[ComboBox1.Tag]);