Problem beim Abfragen der Mausposition

  • VB6

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Alex2000.

    Problem beim Abfragen der Mausposition

    Hallo,
    ich habe ein Programm das herausfinden soll ob sich die Maus über einem bestimmten Label befindet oder nicht. (Ich habe nicht die Mouseover-Funktion benutzt da ich nicht weiß wie ich festellen kann ob sich die Maus nicht über dem Label befindet. Falls jemand weiß wie das geht wäre das auch ne Lösung.)
    Hier nun der Codeausschnitt der Probleme bereitet:

    Visual Basic-Quellcode

    1. Private Sub Timer1_Timer()
    2. GetCursorPos p
    3. If p.X * Screen.TwipsPerPixelX - Me.Left > LItem.Left And p.X * Screen.TwipsPerPixelX - Me.Left < LItem.Left + LItem.Width _
    4. And p.Y * Screen.TwipsPerPixelY - Me.Top > LItem.Top And p.Y * Screen.TwipsPerPixelY - Me.Top < LItem.Top + LItem.Height Then
    5. MsgBox "Test"
    6. End If
    7. End Sub


    Das Problem ist das der Bereich in dem die MsgBox erscheint ein Stück über dem Label liegt und jetzt ist die Frage wieso, da sie ja erscheinen soll wenn die Maus auf dem Label ist.

    Gruß Ed
    wenn nicht um Systemweite Cursor position geht, kommst ohne API weg:

    Visual Basic-Quellcode

    1. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    2. Label1.Caption = X
    3. Label2.Caption = Y
    4. End Sub


    Für systemweite abfrage von Cursorposition siehe link von Neptun !
    Hallo,
    das hatte ich als erstes das Problem ist das der die Koordinaten nicht aktualisiert wenn die Maus nicht auf der Form direkt sondern auf z.b einem Label positioniert war.
    Neptun hat die Lösung die ich bekommen habe schon gepostet und sie funktioniert einwandfrei.
    Sieht jetzt so aus:
    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Private Sub Timer1_Timer()
    2. GetCursorPos P
    3. ScreenToClient Me.hwnd, P
    4. With LItem
    5. If P.x >= Me.ScaleX(.Left, Me.ScaleMode, vbPixels) And _
    6. P.y >= Me.ScaleY(.Top, Me.ScaleMode, vbPixels) And _
    7. P.x <= Me.ScaleX(.Left + .Width, Me.ScaleMode, vbPixels) And _
    8. P.y <= Me.ScaleY(.Top + .Height, Me.ScaleMode, vbPixels) Then
    9. Item.Visible = True
    10. If P.x * Screen.TwipsPerPixelX + Item.Width > Me.Width Then
    11. Item.Left = P.x * Screen.TwipsPerPixelX - Item.Width
    12. Else
    13. Item.Left = P.x * Screen.TwipsPerPixelX
    14. End If
    15. If P.y * Screen.TwipsPerPixelY + Item.Height > Me.Height Then
    16. Item.Top = P.y * Screen.TwipsPerPixelY - Item.Height
    17. Else
    18. Item.Top = P.y * Screen.TwipsPerPixelY
    19. End If
    20. Else
    21. Item.Visible = False
    22. End If
    23. End With
    24. End Sub

    Gruß Ed