Как узнать, что мышь ушла с поверхности пикчебокса?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Juriev
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 25.11.2003 (Вт) 21:13

Как узнать, что мышь ушла с поверхности пикчебокса?

Сообщение Juriev » 27.04.2004 (Вт) 19:33

Всем привет!
Как узнать, что мышь ушла с поверхности пикчебокса? Вокруг него всего много и по разному раскладываются. А для всех элемент_маусемув писать не хочется. Можно ли что-то сделать?
Спасибо!

cg_ck
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 118
Зарегистрирован: 11.06.2003 (Ср) 12:02
Откуда: Riga(Latvia)

Сообщение cg_ck » 27.04.2004 (Вт) 22:22

Всё что удалось придумать это вот это:


Код: Выделить всё
'Создай форму, в ней PictureBox1 и Timer1
Option Explicit
'Положение курсора
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI
xMouse As Long
yMouse As Long
End Type
Private xMouse_ As Long '
Private yMouse_ As Long '

Private Sub Form_Initialize()
    Timer1.Enabled = False
    Timer1.Interval = 100
    Picture1.BackColor = vbBlack
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Picture1.BackColor = vbRed ' Мы навели курсор на PictureBox1
    Dim CursorPosition As POINTAPI
    GetCursorPos CursorPosition
    xMouse_ = CursorPosition.xMouse
    yMouse_ = CursorPosition.yMouse
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
        Dim CursorPosition As POINTAPI
        GetCursorPos CursorPosition
        If CursorPosition.xMouse <> xMouse_ Or CursorPosition.yMouse <> yMouse_ Then ' Мы не находимся на PictureBox1
            Timer1.Enabled = False
            Picture1.BackColor = vbBlack
            Exit Sub
        End If
End Sub


Ничего более приемлемого ещё не встречал. Было бы интересно посмотреть.
Ходит по лесу хомяк, хищный маленький дурак...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.04.2004 (Ср) 10:00

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 28.04.2004 (Ср) 11:54

ты предлагаешь это делать через subclassing окна picturebox и ловить событие WM_MOUSELEAVE.
в принципе , это правильно, но первый метод тоже имеет право быть и с хуком не надо возиться :)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 2

    TopList