Суббота, 04.05.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нравится раздел статьи?
Всего ответов: 68
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Система » Железо

Управление мышью

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

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

На нажатие кнопки мыши реагирует метод

 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);

Параметры х и у возвращают координаты курсора.

На отпускание кнопки мыши реагирует метод:

 type

 TMouseEvent = procedure (Sender: TObject;

 Button: TMouseButton;

 Shift: TShiftState; X, Y: Integer) of object;

 property OnMouseUp: TMouseEvent;

Его параметры описаны выше.

При перемещении мыши можно вызывать метод-обработчик

 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;
    

вызывается при прокрутке назад.

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

В качестве примера обработки управляющих воздействий от мыши рассмотрим пример DemoMouse. Он очень прост. Перемещение мыши с нажатой левой кнопкой обеспечивает выделение прямоугольного фрагмента. Такую функцию вы можете наблюдать в любом графическом редакторе, а исходный код проекта использовать в собственных разработках (листинг 27.2).

Таблица 27.1. Свойства и методы класса mouse

Объявление

Тип

Описание

property Capture: HWND;

Pu

Дескриптор элемента управления, над которым находится мышь

property CursorPos: TPoint;

Pu

Содержит координаты указателя мыши

property Draglmmediate: Boolean;

Ro

 

При значении True реакция на нажатие выполняется немедленно

property DragThreshold: Integer;

Ro

Задержка реакции на нажатие

property MousePresent: Boolean;

Ro

Определяет наличие мыши

type UINT = LongWord; property RegWheelMessage: UINT;

Ro

Задает сообщение, посылаемое при прокрутке в ScrollMouse

property WheelPresent: Boolean;

Ro

 

Определяет наличие ScrollMouse

property WheelScrollLines : Integer;

Ro

Задает число прокручиваемых линий

Листинг 27.2. Модуль главной формы проекта DemoMouse

 unit Main;

 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 := 'IHwpMHa: ' + IntToStr(Abs(MouseRect.Right - MouseRect.Left));

 Panels[5].Text := 'BacoTa: ' + IntToStr(Abs(MouseRect.Bottom - MouseRect.Top));

 end; end;

 procedure TMainForm.TimerTimer(Sender: TObject);

 begin

 with StatusBar do

 begin

 Panels[0].Text := 'flaTa: ' + DateToStr(Now); Panels[1].Text := 'BpeMH: ' + TimeToStr(Now);

 end;

 end;

 end.

При нажатии левой кнопки мыши в методе-обработчике FormMouseDown включается режим рисования прямоугольника (isDown := True) и задаются его начальные координаты.

При перемещении мыши по форме проекта вызывается метод-обработчик FormMouseMove, в котором координаты курсора и размеры прямоугольника передаются на панель состояния. Если левая кнопка мыши нажата (isDown = True), то осуществляется перерисовка прямоугольника.

При отпускании кнопки мыши в методе FormMouseUp рисование прямоугольника прекращается (isDown := False).

Если была нажата правая кнопка мыши, то метод-обработчик FormMouseDown обеспечивает отображение диалога выбора цвета, который позволяет сменить цвет линий прямоугольника.

Метод-обработчик TimerTimer обеспечивает отображение на панели состояния текущей даты и времени.

Получить ссылку на материал

Категория: Железо | Добавил: Барон (10.12.2011)
Просмотров: 830 | Теги: Мышь | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
ActiveX [10]
CORBA и COM [16]
Kol и MCK [23]
WinAPI [28]
Компоненты [27]
Работа с Bluetooth [4]
Железо [8]
Текст [18]
Разное [98]
Королевство Delphi © 2010-2024
Яндекс цитирования