среда, 15 октября 2014 г.

10. События формы. Лабораторные Delphi, C++ (6)


События перемещения мыши на форме в 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:
Delphi
procedure 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 TForm1::FormMouseEnter(TObject *Sender)
{
  ListBox1->Items->Add("FormMouseEnter");
}

void __fastcall TForm1::FormMouseLeave(TObject *Sender)
{
  ListBox1->Items->Add("FormMouseLeave");
}
Запустите программу на выполнение. Перемещайте мышь по форме. Проследите за порядком появления событий.
Выделите мышью форму, перейдите на вкладку событий в Инспекторе Объектов. Создайте следующий обработчик события для OnMouseMove:
Delphi
procedure 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:
Delphi
procedure 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:
Delphi
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, определяющие координаты курсора мыши относительно экрана.
Запустите программу на выполнение. Выполняйте вращение колеса мыши вверх и вниз. Посмотрите на результаты.




















Комментариев нет:

Отправить комментарий