Differenze tra le versioni di "Spostare oggetti con il mouse all'interno di un contenitore senza Drag & Drop"
Riga 9: | Riga 9: | ||
==Spostamento con riferimento alle proprietà ''.ScreenX'' e ''.ScreenY''== | ==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 | + | Private x As Short |
− | Private | + | Private y As Short |
'''Public''' Sub Button1_MouseDown() | '''Public''' Sub Button1_MouseDown() | ||
− | + | x = Mouse.X | |
− | + | y = Mouse.Y | |
'''End''' | '''End''' | ||
Riga 23: | Riga 23: | ||
<FONT color=gray>' ''Il "Button" sarà posizionata in questo caso, rispetto al cursore del Mouse, alle coordinate come appresso determinate:''</font> | <FONT color=gray>' ''Il "Button" sarà posizionata in questo caso, rispetto al cursore del Mouse, alle coordinate come appresso determinate:''</font> | ||
− | + | Button1.Move(Mouse.ScreenX - Me.ScreenX - x, Mouse.ScreenY - Me.ScreenY - y) | |
− | |||
− | |||
− | |||
'''End''' | '''End''' | ||
===Usando la Proprietà ".Tag" dell'Oggetto da spostare=== | ===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 | + | 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() | ||
− | + | <FONT color=gray>' ''Istanzia la Proprietà ".Tag" dell'Oggetto "Button" come vettore con due elementi:''</font> | |
+ | Button1.Tag = [0, 0] | ||
'''End''' | '''End''' | ||
Riga 40: | Riga 38: | ||
'''Public''' Sub Button1_MouseDown() | '''Public''' Sub Button1_MouseDown() | ||
− | + | With Button1 | |
− | + | .Tag[0] = Mouse.X | |
− | + | .Tag[1] = Mouse.Y | |
− | + | End With | |
'''End''' | '''End''' | ||
Riga 50: | Riga 48: | ||
<FONT color=gray>' ''Il "Button" sarà posizionata in questo caso, rispetto al cursore del Mouse, alle coordinate come appresso determinate:''</font> | <FONT color=gray>' ''Il "Button" sarà posizionata in questo caso, rispetto al cursore del Mouse, alle coordinate come appresso determinate:''</font> | ||
− | + | Button1.Move(Mouse.ScreenX - Me.ScreenX - .Tag[0], Mouse.ScreenY - Me.ScreenY - .Tag[1]) | |
− | |||
− | |||
− | |||
'''End''' | '''End''' | ||
Riga 60: | Riga 55: | ||
==Spostamento con riferimento alla posizione del cursore del mouse rispetto al contenitore== | ==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. | In questo caso non si fa riferimento allo Schermo, bensì al Contenitore dell'Oggetto da spostare. | ||
− | Private | + | Private x As Short |
− | Private | + | Private y As Short |
'''Public''' Sub Button1_MouseDown() | '''Public''' Sub Button1_MouseDown() | ||
− | + | x = Mouse.X | |
− | + | y = Mouse.Y | |
'''End''' | '''End''' | ||
Riga 74: | Riga 69: | ||
<FONT color=gray>' ''Il "Button" sarà posizionato in questo caso, rispetto al cursore del Mouse, alle coordinate come appresso determinate:''</font> | <FONT color=gray>' ''Il "Button" sarà posizionato in questo caso, rispetto al cursore del Mouse, alle coordinate come appresso determinate:''</font> | ||
− | + | Button1 | |
− | . | + | .Move(.X + Mouse.X - x, .Y + Mouse.Y - y) |
− | |||
End With | End With | ||
Riga 85: | Riga 79: | ||
With Button1 | With Button1 | ||
− | . | + | .Move((Mouse.X + .X) - .W <FONT color=#B22222>/ 2</font>, (Mouse.Y + .Y) - .H <FONT color=#B22222>/ 2</font>) |
− | |||
End With | End With | ||
Riga 94: | Riga 87: | ||
=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 Oggetto (nell'esempio: un ''Button'') dal ''Form'' in un ''Panel'' con conseguente modifica della sua 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 | + | Private x As Short |
− | Private | + | Private y As Short |
Riga 105: | Riga 98: | ||
End With | End With | ||
− | + | x = Mouse.X | |
− | + | y = Mouse.Y | |
'''End''' | '''End''' | ||
Riga 113: | Riga 106: | ||
With Button1 | With Button1 | ||
− | . | + | .Move(.X + Mouse.X - x, .Y + Mouse.Y - y) |
− | |||
End With | End With | ||
Versione delle 23:08, 29 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 x As Short Private y As Short Public Sub Button1_MouseDown() x = Mouse.X y = Mouse.Y End Public Sub Button1_MouseMove() ' Il "Button" sarà posizionata in questo caso, rispetto al cursore del Mouse, alle coordinate come appresso determinate: Button1.Move(Mouse.ScreenX - Me.ScreenX - x, Mouse.ScreenY - Me.ScreenY - y) 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() ' Istanzia la Proprietà ".Tag" dell'Oggetto "Button" come vettore con due elementi: 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: Button1.Move(Mouse.ScreenX - Me.ScreenX - .Tag[0], Mouse.ScreenY - Me.ScreenY - .Tag[1]) 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 x As Short Private y As Short Public Sub Button1_MouseDown() x = Mouse.X y = Mouse.Y End Public Sub Button1_MouseMove() ' Il "Button" sarà posizionato in questo caso, rispetto al cursore del Mouse, alle coordinate come appresso determinate: Button1 .Move(.X + Mouse.X - x, .Y + Mouse.Y - y) 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 .Move((Mouse.X + .X) - .W / 2, (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 x As Short Private y 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 x = Mouse.X y = Mouse.Y End Public Sub Button1_MouseMove() With Button1 .Move(.X + Mouse.X - x, .Y + Mouse.Y - y) 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