Управление мышью
Каждый элемент управления обладает набором свойств и методов, обеспечивающих управление мышью. Понятно, что это важный и нужный механизм. Рассмотрим кратко его устройство.
Воздействие мышью на интерфейсные элементы приложения разработчик может отслеживать при помощи целой группы методов-обработчиков. На нажатие кнопки мыши реагирует метод:
type TMouseEvent = procedure (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) of object; property OnMouseDown: TMouseEvent;
В параметре Button передается признак нажатой кнопки:
type TMouseButton = (mbLeft, mbRight, mbMiddle);
Параметр Shift определяет нажатие дополнительной клавиши на клавиатуре:
type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);
Параметры X и Y возвращают координаты курсора.
На отпускание кнопки мыши реагирует метод:
type TMouseEvent = procedure (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) of object; property OnMouseUp: TMouseEvent;
Его параметры описаны выше.
При перемещении мыши можно вызывать метод-обработчик:
type TMouseMoveEvent = procedure (Sender: TObject; Shift: TShiftState; X, Y: Integer) of object; property OnMouseMove: TMouseMoveEvent;
Если у разработчика нет необходимости так подробно отслеживать состояние мыши, можно воспользоваться двумя другими методами:
property OnClick: TNotifyEvent; property OnDblClick: TNotifyEvent;
Первый реагирует на щелчок кнопкой, второй - на двойной щелчок.
Каждый элемент управления может изменять внешний вид указателя мыши, перемещающейся над ним. Для этого используется свойство:
property Cursor: TCursor;
Для управления дополнительными возможностями мыши для работы в Internet (ScrollMouse) предназначены три метода обработчика, реагирующие на прокрутку:
property OnMouseWheel: TMouseWheelEvent; property OnMouseWheelUp: TMouseWheelUpDownEvent; property OnMouseWheelDown: TMouseWheelUpDownEvent;
OnMouseWheel вызывается при прокрутке вообще, OnMouseWheelUp - при прокрутке вперёд, OnMouseWheelDown - при прокрутке назад.
В VCL имеется класс TMouse, содержащий свойства мыши, установленной на компьютере. Обращаться к экземпляру класса, который создается автоматически, можно при помощи глобальной переменной Mouse. Свойства класса представлены в таблице:
Объявление | Описание |
---|---|
property Capture: HWND; | Дескриптор элемента управления, над которым находится мышь |
property CursorPos: TPoint; | Содержит координаты указателя мыши |
property Draglmmediate: Boolean; | При значении True реакция на нажатие выполняется немедленно |
property DragThreshold: Integer; | Задержка реакции на нажатие |
property MousePresent: Boolean; | Определяет наличие мыши |
type UINT = LongWord; property RegWheelMessage: UINT; | Задает сообщение, посылаемое при прокрутке в ScrollMouse |
property WheelPresent: Boolean; | Определяет наличие ScrollMouse |
property WheelScrollLines: Integer; | Задает число прокручиваемых линий |
В качестве примера обработки управляющих воздействий от мыши рассмотрим пример DemoMouse. Он очень прост. Перемещение мыши с нажатой левой кнопкой обеспечивает выделение прямоугольного фрагмента. Такую функцию вы можете наблюдать в любом графическом редакторе, а исходный код проекта использовать в собственных разработках.
unit uDemo; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, ComCtrls; type TMainForm = class(TForm) ColorDlg: TColorDialog; StatusBar: TStatusBar; Timer: TTimer; procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure TimerTimer(Sender: TObject); private MouseRect: TRect; IsDown: Boolean; RectColor: TColor; public { public declarations } end; var MainForm: TMainForm; implementation {$R *.DFM} procedure TMainForm.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then with MouseRect do begin IsDown := True; Left := X; Top := Y; Right := X; Bottom := Y; Canvas.Pen.Color := RectColor; end; if (Button = mbRight) and ColorDlg.Execute then RectColor := ColorDlg.Color; end; procedure TMainForm.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IsDown := False; Canvas.Pen.Color := Color; with MouseRect do Canvas.Polyline([Point(Left, Top), Point(Right, Top), Point(Right, Bottom), Point(Left, Bottom), Point(Left, Top)]); with StatusBar do begin Panels[4].Text := ''; Panels[5].Text := ''; end; end; procedure TMainForm.FonnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin with StatusBar do begin Panels[2].Text := 'X: ' + IntToStr(X); Panels[3].Text := 'Y: ' + IntToStr(Y); end; if not IsDown then Exit; Canvas.Pen.Color := Color; with mouserect do begin Canvas.Polyline([Point(Left, Top), Point(Right, Top), Point(Right, Bottom), Point(Left, Bottom), Point(Left, Top)]); Right := X; Bottom := Y; Canvas.Pen.Color := RectColor; Canvas.Polyline([Point(Left, Top), Point(Right, Top), Point(Right, Bottom), Point(Left, Bottom), Point(Left, Top)]); end; with StatusBar do begin Panels[4].Text := 'Ширина: ' + IntToStr(Abs(MouseRect.Right - MouseRect.Left)); Panels[5].Text := 'Высота: ' + IntToStr(Abs(MouseRect.Bottom - MouseRect.Top)); end; end; procedure TMainForm.TimerTimer(Sender: TObject); begin with StatusBar do begin Panels[0].Text := 'Дата: ' + DateToStr(Now); Panels[1].Text := 'Время: ' + TimeToStr(Now); end; end; end.
При нажатии левой кнопки мыши в методе-обработчике FormMouseDown включается режим рисования прямоугольника (isDown := True) и задаются его начальные координаты.
При перемещении мыши по форме проекта вызывается метод-обработчик FormMouseMove, в котором координаты курсора и размеры прямоугольника передаются на панель состояния. Если левая кнопка мыши нажата (isDown = True), то осуществляется перерисовка прямоугольника.
При отпускании кнопки мыши в методе FormMouseUp рисование прямоугольника прекращается (isDown := False).
Если была нажата правая кнопка мыши, то метод-обработчик FormMouseDown обеспечивает отображение диалога выбора цвета, который позволяет сменить цвет линий прямоугольника.
Метод-обработчик TimerTimer обеспечивает отображение на панели состояния текущей даты и времени.
Статья добавлена: 16 марта 2007
Следующая статья: Защита формы паролем »
Зарегистрируйтесь/авторизируйтесь,
чтобы оценивать статьи.
Для вставки ссылки на данную статью на другом сайте используйте следующий HTML-код:
Ссылка для форумов (BBCode):
Быстрая вставка ссылки на статью в сообщениях на сайте:
{{a:31}} (буква a — латинская) — только адрес статьи (URL);
{{статья:31}} — полноценная HTML-ссылка на статью (текст ссылки — название статьи).
Поделитесь ссылкой в социальных сетях:
Комментарии читателей к данной статье
Репутация: нет |
koctja (15 июня 2013, 17:09): Очень хорошая статья о управлении мышкой, надо попробовать сделать на данных примерах, а то работать с ней бывает трудно, может это улучшит эту работу.
|
Репутация: нет |
processor (16 августа 2011, 11:52): Вообще желательно бы код без ошибок приводить ставить кавычки и единички где надо , а то новичек ведь заклебется разбираться почему не работает. И даже после исправления всех ошибок - не работает и все тут , какие-то исключения возникают )))
|
Оставлять комментарии к статьям могут только зарегистрированные пользователи.