События перемещения мыши на форме в Delphi и C++Builder
Здесь будут исследованы события
формы, появляющиеся при перемещениях пользователем указателя мыши по форме:
·
OnMouseEnter. Возникает, когда пользователь переводит
указатель мыши на поверхность формы — перемещая его с другого компонента формы
или из-за пределов формы.
·
OnMouseMove. Возникает, когда указатель мыши
перемещается по форме.
·
OnMouseLeave. Возникает, когда указатель
мыши покидает форму.
·
OnMouseWheel. Возникает, когда пользователь
вращает колесо мыши в любую сторону.
·
OnMouseWheelDown. Возникает, когда пользователь
вращает колесо мыши вниз.
·
OnMouseWheelUp. Возникает, когда
пользователь вращает колесо мыши вверх.
Запустите на выполнение Delphi или C++Builder. Создайте новый проект, выбрав в меню File | New | VCL
Forms Application - Delphi (File | New | VCL Forms Application – C++Builder).
Положите на форму компонент ListBox. Сюда будут помещаться сообщения программы. Установите
в значение True все подсвойства свойства Anchors: akLeft, akTop, akRight
и akBottom. Компонент будет привязан ко всем
сторонам формы.
В верхней части формы разместите четыре
компонента Label. Двум правым
компонентам метки присвойте имена LX
и LY. Они будут использованы для
отображения текущих координат курсора мыши.
Рис.
1. Созданная форма
События перемещения мыши
Выделите мышью форму, перейдите
на вкладку событий в Инспекторе Объектов. Создайте следующие обработчики событий для OnMouseEnter и OnMouseLeave:
procedure
begin
end;
procedure
begin
end;
TForm1.FormMouseEnter(Sender:
TObject);
begin
ListBox1.Items.Add('FormMouseEnter');
end;
procedure
TForm1.FormMouseLeave(Sender: TObject);
begin
ListBox1.Items.Add(
'FormMouseLeave'
);
end;
C++Builder
void __fastcall
void __fastcall
TForm1::FormMouseEnter(TObject *Sender)
{
ListBox1->Items->Add("FormMouseEnter");
}
void __fastcall
TForm1::FormMouseLeave(TObject *Sender)
{
ListBox1->Items->Add(
"FormMouseLeave"
);
}
Запустите программу на
выполнение. Перемещайте мышь по форме. Проследите за порядком появления
событий.
Выделите мышью форму, перейдите
на вкладку событий в Инспекторе Объектов. Создайте следующий обработчик события для OnMouseMove:
procedure
begin
end;
TForm1.FormMouseMove(Sender:
TObject; Shift: TShiftState; X,
Y: Integer);
begin
LX.Caption := IntToStr(X);
LY.Caption := IntToStr(Y);
end;
C++Builder
void __fastcall
TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
int X,
int Y)
{
LX->Caption = IntToStr(X);
LY->Caption = IntToStr(Y);
}
Обработчику события перемещения
мыши по форме OnMouseMove передаются параметры X
и Y, которые задают, соответственно, горизонтальную и
вертикальную координату курсора мыши (в пикселах) относительно клиентской
области окна. При перемещении мыши по форме в тексты меток LX
и LY будут помещаться текущие координаты курсора мыши.
События вращения колеса мыши
Напишите следующий обработчик
события вращения пользователем колеса мыши OnMouseWheel:
procedure
begin
end;
TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint;
var Handled: Boolean);
begin
ListBox1.Items.Add('FormMouseWheel, WheelDelta = ' + IntToStr(WheelDelta));
end;
C++Builder
void __fastcall
TForm1::FormMouseWheel(TObject *Sender, TShiftState Shift,
int WheelDelta, TPoint
&MousePos,
bool &Handled)
{
ListBox1->Items->Add("FormMouseWheel,
WheelDelta = " + IntToStr(WheelDelta));
}
Обработчику события передается и
целочисленный параметр WheelDelta, определяющий величину смещения
колеса мыши. Если это число положительное, то колесо мыши вращается вверх, если
отрицательное, то вниз.
Напишите следующие обработчики
событий вращения колеса мыши вверх и вниз: OnMouseWheelUp и OnMouseWheelDown:
procedure
TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
ListBox1.Items.Add('FormMouseWheelUp. X = ' +
IntToStr(MousePos.X) +
', Y = '
+
IntToStr(MousePos.Y));
end;
procedure
TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
ListBox1.Items.Add(
'FormMouseWheelDown. X = '
+
IntToStr(MousePos.X) +
', Y = '
+
IntToStr(MousePos.Y));
end;
C++Builder
void __fastcall
TForm1::FormMouseWheelUp(TObject *Sender, TShiftState Shift,
TPoint &MousePos,
bool &Handled)
{
ListBox1->Items->Add("FormMouseWheelUp. X = " +
IntToStr(__int64(MousePos.x))
+ ", Y = " +
IntToStr(__int64(MousePos.y)));
}
void __fastcall
TForm1::FormMouseWheelDown(TObject *Sender, TShiftState Shift,
TPoint &MousePos,
bool &Handled)
{
ListBox1->Items->Add("FormMouseWheelDown. X = " +
IntToStr(__int64(MousePos.x))
+ ", Y = " +
IntToStr(__int64(MousePos.y)));
}
Параметр MousePos,
передаваемый обоим событиям, является экземпляром класса TPoint. Он содержит
члены X и Y, определяющие координаты курсора мыши относительно
экрана.
Запустите программу на выполнение. Выполняйте
вращение колеса мыши вверх и вниз. Посмотрите на результаты.