Avatar billede winkill Nybegynder
27. april 2000 - 15:18 Der er 7 kommentarer og
1 løsning

Mouse Over

Hvordan registrerer jeg når brugeren kører musen væk fra et betemt objekt ?

Sikkert simpelt, men det haster, så der er 500 point til et svar der fører til løsningen på problemet.
Avatar billede steffen Nybegynder
27. april 2000 - 15:56 #1
ehhh, OnMouseOut, ik?
Avatar billede sjensen Nybegynder
27. april 2000 - 16:00 #2
eller onmouseover eller on mousemove

Avatar billede steffen Nybegynder
27. april 2000 - 16:06 #3
ohh, det var javascript, tsk tsk tsk ..

Der er et eksempel på:
http://premium.microsoft.com/vbasic/browse.asp

Use MouseMove Event to highlight your label.
Use Timer to check cursor position.
- if it is not inside label, un-highlight label.

Sub Timer1_Timer
    ret = GetCursorPos(ptapi)  ' get cursor position
    lblRect = GetRect(curCtl)  ' current rectangle
    ' now check if cursor is over current curctl
    If PtInRect(lblRect, ptapi) = 0 Then
        unHiLite
    End If
End Sub

Public Function GetRect(liteCtl As Control) As RECT
' we cannot use API GetWindowRect directly, light controls don't have hwnd
' this works also for non-lite controls
' ScaleMode must be vbTwips!
    Dim px As Integer, py As Integer
    Dim ret As Long, temprect As RECT, tmppt As POINTAPI
    Dim objLblParent As Object
     
    On Error Resume Next
    px = Screen.TwipsPerPixelX
    py = Screen.TwipsPerPixelY
    Set objLblParent = liteCtl.Container ' form or container control
    tmppt.X = 0
    tmppt.Y = 0
    ret = ClientToScreen(objLblParent.hWnd, tmppt)
    ' tmppt contains screen coordinates of client point 0,0
'
    ' to get rectangle, use liteCtl.left, .top, .width and .height properties
    temprect.Left = tmppt.X + liteCtl.Left / px
    temprect.Right = temprect.Left + liteCtl.Width / px
    temprect.Top = tmppt.Y + liteCtl.Top / py
    temprect.Bottom = temprect.Top + liteCtl.Height / py
    ' return rectangle
    GetRect = temprect
End Function
Avatar billede steffen Nybegynder
27. april 2000 - 16:23 #4
Wouw, her var lige en ny fancy ting:

In the form's general declaration area, add:

Private Declare Function SetCapture Lib "user32" (ByVal hWnd As Long) As Long
  Private Declare Function ReleaseCapture Lib "user32" () As Long

In the MouseMove Event of the control, add:

Dim MouseOver As Boolean
' See if the mouse is over
MouseOver = (0 <= X) And (X <= Command2.Width) And (0 <= Y) And (Y <= Command2.Height)

If MouseOver Then
MouseOver is true
        ' Do something
        SetCapture Command2.hWnd
  Else
  ' Mouse Left
        'Do something else
        ReleaseCapture
End If

- og så spiller det ..
Avatar billede tdaugaard Nybegynder
27. april 2000 - 16:26 #5
<< steffen >>

Dit svar nr. 2 virker kun hvis:

1) Controllen har et hWnd
2) Controllen ikke er placeret i en frame, picturebox eller andre Parent controls.
Avatar billede tdaugaard Nybegynder
27. april 2000 - 16:27 #6
Og det ser ikke ud som om svar nr. 1 virker hvis controllen er placeret i en Parent control.
Avatar billede tdaugaard Nybegynder
27. april 2000 - 16:28 #7
Til gengæld er svar nr. 2 kanon godt til ActiveX controller, hvis du skal kunne detecte når musen ikke er over controllen.
Avatar billede winkill Nybegynder
27. april 2000 - 16:50 #8
Tak, det virker som det skal.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester