Tähän ei rajoittuneet kykyni pysty, joten kysyn täältä.
Eli ongelma on tämä, koodin pitäisi siirtää koko formia siten, että kursori "pysyisi" (oikeasti sanottuna formi pysyisi) paikallaan, mutta formi siirtyy siten, että kursori on formin omissa pixeleissä 0,0. Muuten koodi toimii moitteetta.
Dim cursorX As Integer = Cursor.Position.X
Dim cursorY As Integer = Cursor.Position.Y
Dim meX As Integer = Me.Left
Dim meY As Integer = Me.Top
Dim finalX As Integer
Dim finalY As Integer
finalX = cursorX - meX
finalY = cursorY - meY
If (draggable = True) Then
Me.Left = meX + finalX
Me.Top = meY + finalY
End IfToivottavasti tämä kuva tuo jotain selkoa.
En nyt yhtään käsittänyt mitä kummaa tässä haettiin, mutta:
finalX = cursorX - meX Me.Left = meX + finalX = meX + cursorX - meX = cursorX (ja sama y:llä)
Eli ilmeisesti ei ole tarkoitus kuitenkaan formin koordenaatteja asettaa kursorin koordinaateiksi?
Nythän Me.Left = meX + finalX ja finalX = cursorX - meX => Me.left = meX + cursorX - meX = cursorX, eli sen pitäisikin siirtyä kursorin kohdalle (sama Me.Top:in kanssa)...
Jos haluat formin siirtyvän hiiresi mukana raahatessa, niin nuo tämänhetkiset tiedot eivät riitä siihen, vaan sinun pitäisi tietää missä hiiri oli hetki sitten (edellisen kerran kun tämä siirtokoodi suoritettiin).
Esim.
'Julkisia muuttujia tai funktiolle välitettyjä:
Dim oldCursorX As Integer
Dim oldCursorY As Integer
'Ja sitten funktion sisältö:
Dim cursorX As Integer = Cursor.Position.X
Dim cursorY As Integer = Cursor.Position.Y
If (draggable = True) Then
'(varmista, että oldCursorX ja oldCursorY ovat asetettu myös kun nämä rivit suoritetaan ensimmäisen kerran)
Me.Left = Me.Left + cursorX - oldCursorX
Me.Top = Me.Top + cursorY - oldCursorY
End If
oldCursorX = cursorX
oldCursorY = cursorYKiitos paljon! Samin koodilla sain toimimaan hyvin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.