Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Spostare oggetti sul form

    Salve a tutti....come da oggetto,voi come fareste?
    Io ho fatto un tentativo,il codice è questo qui sotto...ma il risultato non è entusiasmante...il primo spostamento lo esegue correttamente....ma se lo si sposta una seconda volta si sposta dove gli pare comparendo e scomparendo
    :master:

    codice:
    Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    
    If Button = 1 Then
       Image1.Left = X
       Image1.Top = Y
    End If
    End Sub
    mic

  2. #2
    Prova così:
    codice:
    Private moving As Boolean
    Private old_x As Single, old_y As Single
    
    Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
       moving = True
       old_x = X
       old_y = Y
    End Sub
    
    Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
       If (Button = 1) And moving Then
          Image1.Left = Image1.Left - (old_x - X)
          Image1.Top = Image1.Top - (old_y - Y)
       End If
    End Sub
    
    Private Sub Image1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
       moving = False
    End Sub
    Chi non cerca trova.

  3. #3
    Perfetto !!!! :mavieni:



    :master: ma non ho capito che conti hai fatto....!
    mic

  4. #4
    tas mi spieghi che conti hai fatto?
    mic

  5. #5
    Dunque... scrivendo la risposta alla tua domanda mi sono accorto che il codice poteva essere semplificato, eliminando la variabile moving e l'evento MouseUp:
    codice:
    Private old_x As Single, old_y As Single
    
    Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
       If Button = 1 Then
          old_x = X
          old_y = Y
       End If
    End Sub
    
    Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
       If Button = 1 Then
          Image1.Left = Image1.Left + (X - old_x)
          Image1.Top = Image1.Top + (Y - old_y)
       End If
    End Sub
    e ora provo a spiegartelo. Va detto che le coordinate X e Y che vengono passate come argomento dagli eventi qui utilizzati sono relative e non assolute, si tratta quindi di valori relativi all'angolo in alto a sinistra del controllo Image1 (questo spiega in parte perchè la tua soluzione iniziale non funziona).

    1. quando l'utente preme il pulsante sx del mouse vengono memorizzate le coordinate X e Y correnti.

    2. quando l'utente muove il mouse, viene calcolata la nuova posizione di Image1. Per capire meglio il calcolo, lo scompongo così:
    codice:
    Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
       Dim delta_x As Single
       Dim delta_y As Single
    
       If Button = 1 Then
          delta_x = X - old_x
          delta_y = Y - old_y
          Image1.Left = Image1.Left + delta_x
          Image1.Top = Image1.Top + delta_y
       End If
    End Sub
    Calcolo per prima cosa il delta_x, cioè la differenza tra X e il vecchio valore di X. Ottengo come risultato un valore che è positivo se l'utente ha spostato il mouse a destra, negativo nel caso contrario. Il discorso è lo stesso per delta_y, che sarà positivo se il mouse si è spostato in basso.
    A questo punto calcolo la nuova posizione di Image1, sommando alla posizione corrente delta_x e delta_y.

    Spero di essere stato abbastanza chiaro!
    Chi non cerca trova.

  6. #6
    CHIARISSIMO :mavieni:

    Grazie tas........
    mic

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.