Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Рекомендуемые сообщения

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

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

End Sub

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

Gorshok23

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

Ссылка на комментарий
Поделиться на другие сайты

gvozd

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

Ссылка на комментарий
Поделиться на другие сайты

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 или нет.

Изменено пользователем dmc
Ссылка на комментарий
Поделиться на другие сайты

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))

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

Изменено пользователем dmc
Ссылка на комментарий
Поделиться на другие сайты

gvozd

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

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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...