Схема обработки события
Рисунок 8.16. Схема обработки события
Рассмотрим основные события, которые может обрабатывать компилятор Kylix. Для начала перечислим эти события:
- OnChange
- OnClick
- OnDblClick
- OnDragDrop
- OnDragOver
- OnKeyPress
- OnKeyUp
- OnMouseDown
- OnMouseMove
- OnPain
- OnEndDrag
- OnEnter
- OnExit
- OnKeyDown
- OnProgress
- OnStartDrag
- OnMouseUp
Рассмотрим каждое событие более подробно.
- Событие OnChange наступает после изменения какого-либо графического объекта. Создавайте обработчик такого события для выполнения каких-либо операций, происходящих, после изменения графического объекта.
- Событие OnClick какого-либо компонента наступает в случае, если пользователь нажал и отпустил левую кнопку мыши в тот момент, когда указатель мыши находился на компоненте. Кроме того, событие OnClick происходит в следующих случаях:
• при выборе пользователем путем нажатия клавиш управления курсором элемента в сетке (Grid), дереве (Trее), списке (List) или выпадающем списке (DropDown List);
• при нажатии пользователем клавиши < Пробел> или <Enter> в тот момент, когда компонент (например, кнопка) был в фокусе (Component. Focused = True);
• при нажатии пользователем клавиши <Enter> в случае, если активная форма имеет кнопку по умолчанию;
• при нажатии пользователем клавиши <Esc> в случае, если активная форма имеет кнопку прерывания;
• при нажатии пользователем комбинации клавиш быстрого доступа ("горячих" клавиш) для доступа к кнопке или пункту меню. Например, в свойстве Caption кнопки формы записано &Пуск, при этом надпись на кнопке имеет вид Пуск. В этом случае, если пользователь нажимает комбинацию клавиш <Alt>+<П>, происходит событие OnClick;
• при установке приложением свойства Сhecked переключателя RadioButton в true;
• при изменении приложением свойства Checked индикатора CheckBox;
• при вызове метода Click элемента меню приложения.
- Событие OnClick возникает для формы в том случае, когда пользователь щелкнул на любом месте формы, незанятом компонентами.
- Событие OnDblClick наступает тогда, когда пользователь дважды щелкнул левой кнопкой мыши на компоненте, причем отпустил кнопку мыши после второго щелчка над компонентом.
Примечаниe
К одному и тому же компоненту нельзя написать обработчики событий OnClick и OnDblClick, поскольку первый из них всегда перехватит первый из щелчков. - Событие OnStartDrag наступает, когда пользователь начинает перетаскивать компонент, т. е. нажал над компонентом левую кнопку мыши и, не отпуская ее, начал смещать курсор мыши. Событие имеет параметр Sender, который содержит наименование перетаскиваемого компонента, или объекта перетаскивания (в случае, если компонент является компонентом контейнерного типа).
- Событие OnDragDrop компонента наступает, когда пользователь отпускает перетаскиваемый компонент над другим компонентом. В обработчике события нужно описать, что должно происходить в момент отпускания перетаскиваемого компонента. При этом параметр Source должен соответствовать перетаскиваемому компоненту, а параметр sender должен соответствовать компоненту, над которым компонент будет отпущен. Кроме того, два параметра (X и Y) служат для хранения координат курсора мыши над компонентом. Система координат в данном случае соответствует клиентской части компонента.
- Событие OnDragOver компонента наступает, когда перетаскиваемый компонент пересекает границу данного компонента и оказывается над ним. Это событие возникает все время, пока пользователь перемещает компонент над компонентом-приемником. Как только пользователь отпускает компонент (отпускает левую кнопку мыши), происходит событие OnDragDrop, описанное выше. Для того чтобы определить, компоненты какого типа принимает данный компонент, используют параметр Accept. Если компонент может принимать любые компоненты, можно оставить обработчик OnDragOver пустым, но он обязательно должен присутствовать. Например:
State: TDragState; var Accept: Boolean); begin
// Данный комментарий нужен, чтобы компилятор не удалил этот пустой // обработчик end;
Во время перетаскивания компонента форма указателя мыши может изменяться. Для установки этого свойства служит свойство DragCursor компонента, на который будет переноситься другой компонент.
Приведем простой пример использования событий OnDragDrop и OnDragOver.
Для наглядного применения события OnDragDrop создадим приложение, которое позволит пользователю перетаскивать строки одного списка в другой. Итак, расположим на форме два списка ListBox; ListBox1 и ListBox2. Добавим строки в первый список путем редактирования его свойства Items. Назовем строки Cтрока 1 Cтрока 10 (Рисунок 8.17).
Для простоты будем перетаскивать строки из первого списка во второй. Поменяем значение свойства DragMode списка ListBox1 на dmAutomatic, что обеспечит автоматическое начало перетаскивания. Теперь для второго списка (ListBox2) напишем обработчик события OnDragOver (листинг 8.2).