Работа с мышью

Ваше приложение может реагировать на действия пользователя, которые он выполняет с помощью мыши. В этой части главы мы расскажем, как можно обрабатывать события мыши.

Событие мыши происходит в тот момент, когда пользователь двигает мышью или нажимает кнопки мыши. CLX поддерживает три события мыши, которые перечислены в табл. 13.4.

Таблица 13.4. События мыши

Событие мыши

Описание

OnMouseDown

Происходит, когда пользователь нажимает кнопку мыши в тот момент, когда указатель мыши расположен над компонентом

OnMouseMove

Происходит, когда пользователь двигает мышью в тот момент, когда указатель мыши расположен над компонентом

Таблица 13.4 (окончание)

Событие мыши

Описание

OnMouseUp

Происходит, когда пользователь отпускает кнопку мыши в тот момент, когда указатель мыши расположен над компонентом

Когда приложение фиксирует, что произошло событие мыши, оно вызывает обработчик данного события, если он был вами написан. В обработчик события передается четыре параметра, которые перечислены в табл. 13.5.

Таблица 13.5. Параметры событий мыши

Параметр

Значение

Sender

Имя объекта, над которым произошло событие мыши

Button

Указывает, какая из трех кнопок мыши нажата. Может принимать значения: mbLeft — левая; mbMiddle — средняя и mbRight — правая

Shift

Показывает состояние кнопок <Alt>, <Ctrl> и <Shift> во время наступления события мыши

X, Y

Координаты клиентской части компонента, над которым произошло событие мыши

Обработка события 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-12-1.jpg

Рис. 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-12-2.jpg

Рис. 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-12-3.jpg

Рис. 13.9. Обработка события OnMouseMove

Hosted by uCoz