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 If
Toivottavasti 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 = cursorY
Kiitos paljon! Samin koodilla sain toimimaan hyvin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.