Страница: 1 |
Ну ты загнул я не знаю как вернуть фокус моему окну , а ты такие вещи спрашиваешь! Такового сообщения не возникает Его необходимо самому реализовать через SetCapture(), ReleaseCapture(), т.е. на форме необходимо организовать что-то в этом роде: cresta, sorry, тепер несколько не в тему для lamepok, используй SetActiveWindow(), SetForegroundWindow(), если в 9х, то все будет замечательно, если же в 2к/ХР/2003, работать будет но через раз... т.к. в них запрещено приложениям брать/устанавливать фокус программно, т.е. это может только пользователь... 2cresta: А еще можно юзать TrackMouseEvent... Страница: 1 |
Вопрос: Сообщение
Добавлено: 29.03.04 23:28
Автор вопроса: cresta
Люди, кто знает, какое сообщение приходит в оконную процедуру при покидании мышью пределов окна? Т.е. на чем реалтзовать MouseOut? Заранее спасибо за ответ.
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
lamepok
ICQ: 6206624
Вопросов: 5
Ответов: 52
Профиль | | #1
Добавлено: 30.03.04 01:16
Номер ответа: 2
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #2
Добавлено: 30.03.04 01:32
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If X > 0 And X < Me.ScaleWidth And Y > 0 And Y < Me.ScaleHeight Then
If Not Len(Me.Tag) = 0 Then Exit Sub
' RaiseEvent MouseEnter(Button, Shift, X, Y) 'Мышка попала на кнопку
Me.Tag = "SetCapture"
Call SetCapture(Me.hwnd)
Else
' RaiseEvent MouseExit(Button, Shift, X, Y) 'Мышка вне пределов баттона
Tag = vbNullString
Call ReleaseCapture
End If
End Sub
Номер ответа: 3
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #3
Добавлено: 30.03.04 01:35
Номер ответа: 4
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #4
Добавлено: 30.03.04 02:38
Номер ответа: 5
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #5
Добавлено: 30.03.04 03:09
Чего-то не очень получается c SetCapture Когда мышь за пределами формы, окно не принимает от нее информации, т.е. Mouse_Move не случается. Будем теперь пробовать TrackMouseEvent...
Номер ответа: 6
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #6
Добавлено: 30.03.04 03:55
To Sharp & Sne: спасибо за помощь, есть такие сообщения: WM_MOUSELEAVE и WM_MOUSEHOVER, только их посылает не ядро Windows а Public Declare Function TrackMouseEvent Lib "user32" (lpEventTrack As TRACKMOUSEEVENTTYPE) As Long
Единственно надо после получения WM_MOUSELEAVE в событии Form_MouseMove переключать в структуре TRACKMOUSEEVENTTYPE флаг dwFlags на TME_HOVER, и соответственно после получения WM_MOUSEHOVER - переключать флаг обратно на TME_LEAVE, т.е. ф-ция не отслеживает одновременно оба события, только одно. Всё работает.