Jump to content

Мышь


Recommended Posts

Зайдешь в окно кода и выберешь для объекта Form событие MouseMove

Private Sub Form_MouseDown(Button As Integer,Shift As Integer, X As Single, Y As Single)

End Sub

Объяснию парметры

Button - какая из трех кнопок мыши была нажата;

Shift - были при этом в нажатом состоянии служебные клавиши на клавиатуре и какие именно;

X, Y - координаты курсора мыши во время движения.

Теперь остается сравнить с координатами любого объекта расположенного на форме.

Link to comment
Share on other sites

Gorshok23

Ну я ж не совсем ламер! Уж знаю что такое Button, Shift, X, Y! А вот как сравнить... И зачем мне МаусДаун, мне скоре МаусМув надо.

Link to comment
Share on other sites

gvozd

Ты явно прибавляешь к левой границе рисунка размер по вертикали, а не по горизонтали... Да и Y тоже надо сравнивать с соответствующими границами.

Link to comment
Share on other sites

TForm1::FormMouseMove(...)

{

Label1.Caption = "Мышка вне Image";

}

TForm1::Image1MouseMove(....)

{

Label1.Caption = "Мышка на Image";

}

Можно отслеживать с помощью таймера

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

POINT Pnt;

RECT rc;

rc.left = Left + Image1->Left;

rc.top = Top + Image1->Top; //+ размер заголовка окна

rc.right = rc.left + Image1->Width;

rc.bottom = rc.top + Image1->Height;

GetCursorPos(&Pnt);

Label1->Caption = Pnt.x;

Label2->Caption = Pnt.y;

Label3->Caption = PtInRect(&rc, Pnt);

}

Значение третьей метки будет 1 или 0 в зависимости находится курсор мыши над Image или нет.

Edited by dmc
Link to comment
Share on other sites

gvozd

там собственно одно и тоже :( Только во втором примере нужно будет объявить GetCursorPos и PtInRect (см. API Viewer).

Dim Pnt As POINTAPI

Dim rc As RECT

rc.Left = Left + Image1.Left

rc.Top = Top + Image1.Top //+ размер заголовка окна

rc.Right = rc.Left + Image1.Width

rc.Bottom = rc.Top + Image1.Height

GetCursorPos Pnt

Pnt.x = Pnt.x * 15 ''VB измеряет не пикселях, а в своих твипах

Pnt.y = Pnt.y * 15 ''GetCursorPos возвращает пиксели, поэтому переводим в твипы :(

Label1.Caption = Pnt.x

Label2.Caption = Pnt.y

Label3.Caption = Str(PtInRect(rc, Pnt.x, Pnt.y))

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

Edited by dmc
Link to comment
Share on other sites

gvozd

Ну нельзя же писать программы, не зная языка, на котором пишешь...

Dim rc As RECT
- объявление переменной типа RECT с именем rc, а тип RECT - от слова rectangular - имеющийся в языке составной тип (заранее заготовленное описание структуры переменных), объединяющий под одним именем несколько полей, предназначенных для размещения в них различных параметров прямоугольников. Этот готовый тип удобно использовать при работе с прямоугольниками.
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...