вызывается при прокрутке назад.
В VCL имеется класс ТМоше, содержащий свойства мыши, установленной на компьютере. Обращаться к экземпляру класса, который создается автоматически, можно при помощи глобальной переменной Mouse. Свойства класса представлены в табл. 27.1.
В качестве примера обработки управляющих воздействий от мыши рассмотрим пример DemoMouse. Он очень прост. Перемещение мыши с нажатой левой кнопкой обеспечивает выделение прямоугольного фрагмента. Такую функцию вы можете наблюдать в любом графическом редакторе, а исходный код проекта использовать в собственных разработках (листинг 27.2).
Таблица27.1. Свойстваиметодыкласса TMouse
Объявление |
Тип I Описание |
|
|
Pu |
Дескриптор элемента управления, над которым находится мышь |
|
Pu |
Содержит координаты указателя мыши |
|
Ro |
При значении True реакция на нажатие выполняется немедленно |
|
Ro |
Задержка реакции на нажатие |
|
Ro |
Определяет наличие мыши |
|
Ro |
Задает сообщение, посылаемое при прокрутке в ScrollMouse |
property WheelPresent: Boolean; | |
Ro |
Определяет наличие ScrollMouse |
property WheelScrollLines: Integer; I |
Ro |
Задает число прокручиваемых линий |
j Листинг 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 Timer Timer (Sender: TObj ect) ; private
MouseRect: TRect;
IsDown: Boolean;
RectColor: TColor; public
{ Public declarations } end;
var
MainForm: TMainForm; inplerrentat ion {$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 Co lorDlg. 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. FormMouseMove (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) ,