Пятница, 24.10.2025, 04:04
Приветствую Вас Гость | RSS
Главная | Статьи | Регистрация | Вход
Меню сайта
Категории раздела
Базы данных [11]
Мультимедиа [2]
Графика [2]
Защита [0]
Математика [0]
Сеть-интернет [1]
Система [4]
Разное [4]
Поиск
Вход на сайт
Наш опрос
Оцените мой сайт
Всего ответов: 7
Статистика

Онлайн всего: 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);

Параметры 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 обеспечивает отображение на панели состояния текущей даты и времени.



Источник: http://www.delphi.int.ru/articles/31/
Категория: Система | Добавил: maxim-pogasim (07.07.2015)
Просмотров: 252 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Программистами не рождаются.Copyright BPC Team © 2014 - 2025

Хочу сжечь на костре этот дебильный Хостинг от uCozЯндекс.Метрика