Differenze tra le versioni di "Spostare oggetti con il mouse all'interno di un contenitore senza Drag & Drop"
Riga 7: | Riga 7: | ||
Il semplice spostamento può far riferimento alle posizioni assolute orizzontale e verticale del cursore del mouse all'interno dello schermo, ossia alle proprietà ''.ScreenX'' e ''.ScreenY'' della Classe ''Mouse''; oppure può far riferimento alla posizione del cursore del mouse rispetto al contenitore genitore dell'oggetto da spostare. | Il semplice spostamento può far riferimento alle posizioni assolute orizzontale e verticale del cursore del mouse all'interno dello schermo, ossia alle proprietà ''.ScreenX'' e ''.ScreenY'' della Classe ''Mouse''; oppure può far riferimento alla posizione del cursore del mouse rispetto al contenitore genitore dell'oggetto da spostare. | ||
− | + | ==Spostamento con riferimento alle proprietà ''.ScreenX'' e ''.ScreenY''== | |
− | |||
Poniamo il caso di voler spostare con il mouse un ''Button'' all'interno di un ''Form'': | Poniamo il caso di voler spostare con il mouse un ''Button'' all'interno di un ''Form'': | ||
Private spx As Short | Private spx As Short | ||
Riga 20: | Riga 19: | ||
'''End''' | '''End''' | ||
− | |||
'''Public''' Sub Button1_MouseMove() | '''Public''' Sub Button1_MouseMove() | ||
Riga 32: | Riga 30: | ||
'''End''' | '''End''' | ||
− | + | ===Usando la Proprietà ".Tag" dell'Oggetto da spostare=== | |
− | Se non si intende utilizzare alcuna variabile ''globale'', sarà possibile servirsi - ad esempio - della proprietà ''.Tag'' dell' | + | Se non si intende utilizzare alcuna variabile ''globale'', sarà possibile servirsi - ad esempio - della proprietà ''.Tag'' dell'Oggetto da spostare, avendo però cura di istanziare tale proprietà come <SPAN Style="text-decoration:underline">vettore con due elementi</span>: |
'''Public''' Sub Form_Open() | '''Public''' Sub Form_Open() | ||
Riga 39: | Riga 37: | ||
'''End''' | '''End''' | ||
− | |||
'''Public''' Sub Button1_MouseDown() | '''Public''' Sub Button1_MouseDown() | ||
Riga 49: | Riga 46: | ||
'''End''' | '''End''' | ||
− | |||
'''Public''' Sub Button1_MouseMove() | '''Public''' Sub Button1_MouseMove() | ||
Riga 62: | Riga 58: | ||
− | + | ==Spostamento con riferimento alla posizione del cursore del mouse rispetto al contenitore== | |
− | + | In questo caso non si fa riferimento allo Schermo, bensì al Contenitore dell'Oggetto da spostare. | |
− | |||
Private spx As Short | Private spx As Short | ||
Private spy As Short | Private spy As Short | ||
− | '''Public''' Sub | + | '''Public''' Sub Button1_MouseDown() |
− | + | spx = Mouse.X | |
− | + | spy = Mouse.Y | |
'''End''' | '''End''' | ||
+ | '''Public''' Sub Button1_MouseMove() | ||
− | + | <FONT color=gray>' ''Il "Button" sarà posizionato in questo caso, rispetto al cursore del Mouse, alle coordinate come appresso determinate:''</font> | |
− | + | With Button1 | |
− | <FONT color=gray>' '' | + | .X = .X + Mouse.X - spx |
− | + | .Y = .Y + Mouse.Y - spy | |
− | + | End With | |
− | |||
− | |||
'''End''' | '''End''' | ||
− | |||
Se vogliamo che il puntatore del mouse capiti durante lo spostamento esattamente al centro dell'oggetto, allora scriveremo così: | Se vogliamo che il puntatore del mouse capiti durante lo spostamento esattamente al centro dell'oggetto, allora scriveremo così: | ||
− | '''Public''' Sub | + | '''Public''' Sub Button1_MouseMove() |
− | + | With Button1 | |
− | + | .X = (Mouse.X + .X) - .W <FONT color=#B22222>/ 2</font> | |
− | + | .Y = (Mouse.Y + .Y) - .H <FONT color=#B22222>/ 2</font> | |
− | + | End With | |
'''End''' | '''End''' | ||
Riga 100: | Riga 93: | ||
=Spostamento in altro contenitore e modifica della proprietà ''Parent''= | =Spostamento in altro contenitore e modifica della proprietà ''Parent''= | ||
− | Il caso che segue prevede lo spostamento di un | + | Il caso che segue prevede lo spostamento di un Oggetto (nell'esempio: un ''Button'') dal ''Form'' in un ''Panel'' con conseguente modifica della sua proprietà ''Parent'': |
Private spx As Short | Private spx As Short | ||
Private spy As Short | Private spy As Short | ||
Riga 116: | Riga 109: | ||
'''End''' | '''End''' | ||
− | |||
'''Public''' Sub Button1_MouseMove() | '''Public''' Sub Button1_MouseMove() | ||
Riga 126: | Riga 118: | ||
'''End''' | '''End''' | ||
− | |||
'''Public''' Sub Button1_MouseUp() | '''Public''' Sub Button1_MouseUp() |
Versione delle 09:41, 26 nov 2021
Vedremo di seguito come spostare un oggetto all'interno di un contenitore senza l'uso del Drag 'n Drop.
Per effettuare lo spostamento dell'oggetto useremo l'evento _MouseMove() che viene sollevato quando il mouse, stando all'interno dell'oggetto, viene spostato, mentre un tasto del mouse è tenuto premuto.
Semplice spostamento
Il semplice spostamento può far riferimento alle posizioni assolute orizzontale e verticale del cursore del mouse all'interno dello schermo, ossia alle proprietà .ScreenX e .ScreenY della Classe Mouse; oppure può far riferimento alla posizione del cursore del mouse rispetto al contenitore genitore dell'oggetto da spostare.
Spostamento con riferimento alle proprietà .ScreenX e .ScreenY
Poniamo il caso di voler spostare con il mouse un Button all'interno di un Form:
Private spx As Short Private spy As Short Public Sub Button1_MouseDown() spx = Mouse.X spy = Mouse.Y End Public Sub Button1_MouseMove() ' Il "Button" sarà posizionata in questo caso, rispetto al cursore del Mouse, alle coordinate come appresso determinate: With Button1 .X = Mouse.ScreenX - Me.ScreenX - spx .Y = Mouse.ScreenY - Me.ScreenY - spy End With End
Usando la Proprietà ".Tag" dell'Oggetto da spostare
Se non si intende utilizzare alcuna variabile globale, sarà possibile servirsi - ad esempio - della proprietà .Tag dell'Oggetto da spostare, avendo però cura di istanziare tale proprietà come vettore con due elementi:
Public Sub Form_Open() Button1.Tag = [0, 0] End Public Sub Button1_MouseDown() With Button1 .Tag[0] = Mouse.X .Tag[1] = Mouse.Y End With End Public Sub Button1_MouseMove() ' Il "Button" sarà posizionata in questo caso, rispetto al cursore del Mouse, alle coordinate come appresso determinate: With Button1 .X = Mouse.ScreenX - Me.ScreenX - .Tag[0] .Y = Mouse.ScreenY - Me.ScreenY - .Tag[1] End With End
Spostamento con riferimento alla posizione del cursore del mouse rispetto al contenitore
In questo caso non si fa riferimento allo Schermo, bensì al Contenitore dell'Oggetto da spostare.
Private spx As Short Private spy As Short Public Sub Button1_MouseDown() spx = Mouse.X spy = Mouse.Y End Public Sub Button1_MouseMove() ' Il "Button" sarà posizionato in questo caso, rispetto al cursore del Mouse, alle coordinate come appresso determinate: With Button1 .X = .X + Mouse.X - spx .Y = .Y + Mouse.Y - spy End With End
Se vogliamo che il puntatore del mouse capiti durante lo spostamento esattamente al centro dell'oggetto, allora scriveremo così:
Public Sub Button1_MouseMove() With Button1 .X = (Mouse.X + .X) - .W / 2 .Y = (Mouse.Y + .Y) - .H / 2 End With End
Spostamento in altro contenitore e modifica della proprietà Parent
Il caso che segue prevede lo spostamento di un Oggetto (nell'esempio: un Button) dal Form in un Panel con conseguente modifica della sua proprietà Parent:
Private spx As Short Private spy As Short Public Sub Button1_MouseDown() With Button1 ' Solo per curiosità vediamo il contenitore Padre attuale dell'oggetto: Print "Attuale 'Genitore':", .Parent.Name End With spx = Mouse.X spy = Mouse.Y End Public Sub Button1_MouseMove() With Button1 .X = .X + Mouse.X - spx .Y = .Y + Mouse.Y - spy End With End Public Sub Button1_MouseUp() If Button1.Parent.Name = "FMain" And Mouse.Inside(Panel1) Then With Button1 ' Si effettua la modifica del contenitore genitore dell'oggetto; ' il contenitore "Panel1" diventa il nuovo "Padre" dell'oggetto: .Reparent(Panel1, .X - Panel1.X, .Y - Panel1.Y) Print "\nNuovo 'Genitore':", .Parent.Name End With Endif End