tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
2118
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von wewa
    wewa wewa ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Beiträge
    25
    Hallo!

    Ich würde in meinem VB 6 Programm gerne Objekte wie Rechtecke usw. mit der Maus bewegen.
    Zunächst habe ich da mal ein Programm, bei dem einfach ein Rechteck (in meinem Fall ein Label mit schwarzem Rahmen) am Mauszeiger hängt.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
    Option Explicit
     
    Private Type POINTAPI
      X As Long
      Y As Long
    End Type
     
    Private Declare Function GetCursorPos Lib "user32" _
     (lpPoint As POINTAPI) As Long
     
    Public Function GetMouseX() As Long
    'Left
      Dim nPoint As POINTAPI
      
      GetCursorPos nPoint
      GetMouseX = nPoint.X - ScaleX(Me.Left, vbTwips, vbPixels)
    End Function
     
    Public Function GetMouseY() As Long
    'Top
      Dim nPoint As POINTAPI
      
      GetCursorPos nPoint
      GetMouseY = nPoint.Y - ScaleY(Me.Top, vbTwips, vbPixels)
    End Function
     
     
    Private Sub Timer1_Timer()
        Text1.Text = CStr(GetMouseY())
        Text2.Text = CStr(GetMouseX())
        
        lblRechteck(0).Top = GetMouseY()
        lblRechteck(0).Left = GetMouseX()
    End Sub
    Mein Problem ist nun, dass die Grafik nicht an der Spitze des Mauszeigers hängt, sondern um einige Pixel verschoben.
    Darum bräuchte ich eine Methode um die Breite der Ränder (Oben und Links) zu ermitteln, damit ich das bei der Berechnung der Position des Rechtecks berücksichtigen kann. Hat vielleicht jemand eine Möglichkeit parat?
    Oder gibt es eine einfachere Möglichkeit, Objekte mit der Maus zu bewegen?
    Geändert von wewa (09.09.08 um 15:12 Uhr)
     

  2. #2
    Zvoni Zvoni ist offline Mitglied Platin
    Registriert seit
    Jul 2008
    Ort
    Hinter dem Mond gleich links
    Beiträge
    735
    Mal unabhängig von deinem Problem: Dir ist bewusst, dass in dem Code-Ausschnitt oben nirgends die Sub "GetMousePos" aufgerufen wird?
     
    Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein

    Code vb:
    1
    
    If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")

  3. #3
    Avatar von wewa
    wewa wewa ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Beiträge
    25
    Diese Funktion wird momentan auch nicht benötigt (darum aus gepostetem Code entfernt).

    Aber darin liegt ja auch gar nicht das Problem.
     

  4. #4
    Avatar von wewa
    wewa wewa ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Beiträge
    25
    oder gibt es vielleicht die Möglichkeit, die Mausposition innerhalb des aktuellen Fensters zu ermitteln?
     

  5. #5
    Zvoni Zvoni ist offline Mitglied Platin
    Registriert seit
    Jul 2008
    Ort
    Hinter dem Mond gleich links
    Beiträge
    735
    Ich glaube eher, das Problem liegt darin, dass die Spitze des Mauszeigers eben nicht der Punkt ist, auf welchen sich die Maus-Koordinaten beziehen, sondern eben um ein paar Pixel versetzt ist. Mag mich aber auch irren.
     
    Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein

    Code vb:
    1
    
    If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")

  6. #6
    Avatar von wewa
    wewa wewa ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Beiträge
    25
    nein die Koordinaten geben sicher die Spitze des Mauszeigers an (das merkt man schon daran, dass das Rechteck ziemlich weit verschoben ist).

    Das liegt daran, dass sich die Top und Left Koordinaten eines Forms an den äßeren Rand des Forms beziehen. Und die Koordinaten von Elementen im Form beziehen sich auf den inneren Rand des Forms. Darum müsste ich irgendwie die Breite der Ränder ermitteln.
     

  7. #7
    Zvoni Zvoni ist offline Mitglied Platin
    Registriert seit
    Jul 2008
    Ort
    Hinter dem Mond gleich links
    Beiträge
    735
    uff, ich erinner mich dunkel daran, dass es ne Möglichkeit per API gibt, den Client-Bereich eines Fensters zu ermitteln (Jedes Fenster hat ein Rectangle für sich, als auch ein Rectangle für den Clientbereich)

    Ich glaube das war die API "ClientToScreen".
     
    Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein

    Code vb:
    1
    
    If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")

Ähnliche Themen

  1. Object mit der Maus bewegen
    Von sharK223 im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 28.06.10, 18:11
  2. Mit der Maus Landschaft bewegen?
    Von ValentinWinkelmann im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 17.01.10, 17:41
  3. Maus Bewegen
    Von liquidbeats im Forum Coders Talk
    Antworten: 10
    Letzter Beitrag: 25.05.05, 11:24
  4. Antworten: 4
    Letzter Beitrag: 19.08.04, 14:18
  5. Maus bewegen
    Von bigmex im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 09.08.04, 19:35