Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: hw.t-k.ru
 Профиль | | #2
Добавлено: 30.03.04 01:32

Такового сообщения не возникает :( Его необходимо самому реализовать через SetCapture(), ReleaseCapture(), т.е. на форме необходимо организовать что-то в этом роде:

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

 

If Len(Me.Tag) = 0 Then Exit Sub
' RaiseEvent MouseExit(Button, Shift, X, Y) 'Мышка вне пределов баттона
Tag = vbNullString
Call ReleaseCapture
End If
End Sub

Ответить

Номер ответа: 3
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 30.03.04 01:35

cresta, sorry, тепер несколько не в тему для lamepok, используй SetActiveWindow(), SetForegroundWindow(), если в 9х, то все будет замечательно, если же в 2к/ХР/2003, работать будет но через раз... т.к. в них запрещено приложениям брать/устанавливать фокус программно, т.е. это может только пользователь...

Ответить

Номер ответа: 4
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #4
Добавлено: 30.03.04 02:38

2cresta: А еще можно юзать TrackMouseEvent...

Ответить

Номер ответа: 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, т.е. ф-ция не отслеживает одновременно оба события, только одно. Всё работает.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам