Работа
с мышью
Ваше приложение может реагировать
на действия пользователя, которые он выполняет с помощью мыши. В этой части
главы мы расскажем, как можно обрабатывать события мыши.
Событие мыши происходит
в тот момент, когда пользователь двигает мышью или нажимает кнопки мыши. CLX
поддерживает три события мыши, которые перечислены в табл. 13.4.
Таблица
13.4. События мыши
Событие мыши |
Описание |
|
Происходит, когда
пользователь нажимает кнопку мыши в тот момент, когда указатель мыши
расположен над компонентом |
|
Происходит, когда
пользователь двигает мышью в тот момент, когда указатель мыши расположен
над компонентом |
Таблица
13.4 (окончание)
Событие мыши |
Описание |
|
Происходит, когда
пользователь отпускает кнопку мыши в тот момент, когда указатель мыши
расположен над компонентом |
Когда приложение фиксирует,
что произошло событие мыши, оно вызывает обработчик данного события, если он
был вами написан. В обработчик события передается четыре параметра, которые
перечислены в табл. 13.5.
Таблица
13.5. Параметры событий мыши
Параметр |
Значение |
|
Имя объекта, над
которым произошло событие мыши |
|
Указывает, какая
из трех кнопок мыши нажата. Может принимать значения: |
|
Показывает состояние
кнопок <Alt>, <Ctrl> и <Shift> во время наступления
события мыши |
|
Координаты клиентской
части компонента, над которым произошло событие мыши |
Обработка события OnMouseDown
Всякий раз, когда пользователь
нажимает любую кнопку мыши, происходит событие OnMouseDown
. Для
использования этого события вам нужно написать обработчик события у желаемого
компонента. Например, если вы хотите обработать событие OnMouseDown
,
когда пользователь нажмет кнопку мыши над формой Form1, нужно в окне
инспектора объектов на вкладке Events найти событие OnMouseDown
для формы Form1 и дважды щелкнуть на нем. В результате Kylix создаст
заготовку обработчика события нажатия кнопки мыши для формы (листинг 13.24).
Листнг 13.24.Заготовка
обработчика события OnMouseDown
procedure TForm1.FormMouseDown(Sender:
TObject; Button: TMouseButton;
Shift:
TShiftState; X, Y: Integer);
begin
end;
Приведем пример обработки
данного события (листинг 13.25). Запустите названную программу. При каждом щелчке
в области формы вы увидите надпись "Здесь!" на месте, где вы щелкнули
мышью (рис. 13.7).
Лизинг 13.25.Пример обработки
события OnMouseDown
procedure TForm1. FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
Canvas.TextOut (X, Y, 'Здесь!'); { печатает текст на канве }
end;
Рис.
13.7. Обработка события OnMouseDown
Еще один пример (листинг
13.26) устанавливает текущую позицию пера в координаты, в которых пользователь
щелкнул мышью.
Листинг 13.26. Установка
позиции пера в координатах, указаннных пользователем
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
Canvas.MoveTo (X, Y); { установка позиции пера } end;
Обработка событии OnMouseUp
Событие OnMouseUp
происходит всякий раз, когда пользователь отпускает на-жатую кнопку мыши. Комбинация
данного события с событием OnMouseDown
позволит вам, например,
рисовать линии. Когда пользователь нажал кнопку мыши, установить начальную точку
линии, а когда отпустил — конечную.
Для обработки события OnMouseUp
нужно, как и для обработки OnMouseDown
, создать программу-обработчик.
Приведем пример (листинг
13.27), который рисует линию из точки, в которой произошло нажатие кнопки мыши,
в точку, в которой пользователь отпустил кнопку мыши (рис. 13.8).
Листинг 13.27. Пример
рисования линии
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
Canvas.MoveTo(X, Y) ; { установка позиции пера } end;
procedure TForm1. FormMouseUp (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Canvas.LineTo(X, Y); { рисуем линию из координат PenPos в (X, Y) } end;
Пользователь не будет видеть
линию, пока не отпустит кнопку мыши.
Рис.
13.8. Пример рисования линий
Обработка события OnMouseMove
Данное событие происходит
периодически во время перемещения мыши. Для обработки этого события нужно написать
программу-обработчик.
Нижеприведенный пример
(листинг 13.28) показывает, как можно использовать событие OnMouseMove
для немедленного рисования линий (рис. 13.9).
Листинг 13.28.Пример
обработки события OnMouseMove
procedure TForm1.FormMouseMove(Sender: ТОbject;Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
Canvas.LineTo(X, Y); { рисует линию в текущую позицию } end;
Рис.
13.9. Обработка события OnMouseMove