Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Отслеживание позиции мышки Добавлено: 08.12.08 15:51  

Автор вопроса:  KreAtoR
Народ помогите с примером.

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

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #1 Добавлено: 08.12.08 18:43
Если делать "правильно", то надо бы вызывать TrackMouseEvent и ловить WM_MOUSELEAVE(WM_MOUSEHOVER).
Но в конечном итоге, тоже самое сделает таймер, который с определенной периодичостью вызывает GetCursorPos & WindowFromPoint.

Ответить

Номер ответа: 2
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #2 Добавлено: 09.12.08 04:24
приблизительно вот так:
  1.  
  2. ' USERCONTROL InvisibleAtRuntime
  3. Option Explicit
  4. Private Type POINTAPI
  5.         x As Long
  6.         y As Long
  7. End Type
  8. Private Declare Function GetCursorPos Lib "user32" (lpt As POINTAPI) As Long
  9. Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
  10.  
  11. Event Hover()
  12. Event Leave()
  13.  
  14. Private Sub UserControl_Initialize()
  15.     Timer1.Interval = 50
  16.     Timer1.Enabled = True
  17. End Sub
  18.  
  19. Private Sub UserControl_Show()
  20.     If Not UserControl.Ambient.UserMode Then Timer1.Enabled = False
  21. End Sub
  22.  
  23. Private Sub UserControl_Terminate()
  24.     Timer1.Enabled = False
  25. End Sub
  26.  
  27. Private Sub Timer1_Timer()
  28.     Static prevhwnd As Long
  29.     Dim myhwnd As Long, currhwnd As Long
  30.     Dim pt As POINTAPI
  31.     myhwnd = Extender.Parent.hWnd
  32.     Call GetCursorPos(pt)
  33.     currhwnd = WindowFromPoint(pt.x, pt.y)
  34.     If (prevhwnd <> currhwnd) Then
  35.        Select Case myhwnd
  36.        Case prevhwnd
  37.             RaiseEvent Leave
  38.        Case currhwnd
  39.             RaiseEvent Hover
  40.        End Select
  41.     End If
  42.     prevhwnd = currhwnd
  43. End Sub
  44. '------------------
  45. Private Sub UserControl11_Hover()
  46.     Debug.Print "Hover"
  47. End Sub
  48.  
  49. Private Sub UserControl11_Leave()
  50.     Debug.Print "Leave"
  51. End Sub
  52.  
  53.  

Ответить

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



Вопросов: 120
Ответов: 438
 Профиль | | #3 Добавлено: 09.12.08 16:06
ja cool спасибо

Ответить

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



Вопросов: 120
Ответов: 438
 Профиль | | #4 Добавлено: 10.12.08 11:39
два вопроса.
UserControl это что за объект?

ты используещь
 Event Hover()
 Event Leave()

что это вообще такое? можешь немного об этом рассказать или дать ссылку где можно почитать

Ответить

Номер ответа: 5
Автор ответа:
 KreAtoR



Вопросов: 120
Ответов: 438
 Профиль | | #5 Добавлено: 10.12.08 13:33
Wse realisowal.

  1.  
  2. Private Type POINTAPI
  3.     x As Long
  4.     y As Long
  5. End Type
  6.  
  7. Private Declare Function GetCursorPos Lib "user32" (lpt As POINTAPI) As Long
  8. Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
  9.  
  10. Private Sub Timer2_Timer()
  11.     Dim pt As POINTAPI
  12.     'Dim rk As RECT
  13.     Call GetCursorPos(pt)
  14.     Dim pos(3) As Integer
  15.     
  16.     pos(0) = CInt(Main.left) / 15
  17.     pos(1) = CInt(Main.top + Main.frCapture.height) / 15 + 25
  18.     pos(2) = (CInt(Main.width) + CInt(Main.left)) / 15
  19.     pos(3) = (CInt(Main.height) + CInt(Main.top)) / 15
  20.     
  21.     If pt.x < pos(0) Or pt.x > pos(2) Then
  22.         GoTo setPos
  23.     End If
  24.     If pt.y < pos(1) Or pt.y > pos(3) Then
  25.         GoTo setPos
  26.     End If
  27.     Exit Sub
  28. setPos:
  29.     Dim x, y As Long
  30.     If par.input.presentation.show = "yes" Then
  31.         x = (Main.cmdNext.left + Main.left + (Main.cmdNext.width / 2)) / 15
  32.         y = (Main.cmdNext.top + Main.top + (Main.cmdNext.height / 2)) / 15 + 28
  33.     Else
  34.         x = (Main.cmdWMstop.left + Main.left + (Main.cmdWMstop.width / 2)) / 15
  35.         y = (Main.cmdWMstop.top + Main.top + (Main.cmdWMstop.height / 2)) / 15 + 28
  36.     End If
  37.     SetCursorPos x, y
  38. End Sub

Ответить

Номер ответа: 6
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #6 Добавлено: 10.12.08 16:12
  Информации в сети просто море, но своими словами - UserControl - это класс дочернего окна, каркас элемента управления.
При добавлении в проект его ярлычок помещается в панели инструментов наряду с кнопками, тексбоксами и пр.
Если переместить ярлык UserControl на форму, то в коде формы можно будет работать с его свойствами, методами и событиями.
Event Hover() - это как раз и есть декларация события.
А использовал я UserControl для удобства, форм может быть несколько, каждый раз писать в них тот-же код неправильно.
Проще кинуть свой контрол "как кнопку" на форму.

Ответить

Страница: 1 |

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



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