Differenze tra le versioni di "Spostare oggetti con il mouse all'interno di un contenitore senza Drag & Drop"
Riga 1: | Riga 1: | ||
− | Vedremo di seguito come spostare un oggetto all'interno di un | + | Vedremo di seguito come spostare un oggetto all'interno di un ''Contenitore'' <SPAN style="text-decoration:underline">senza</span> l'uso del ''Drag 'n Drop''. <SUP>[[[#Note|nota 1]]]</sup> |
− | Per effettuare lo spostamento dell'Oggetto grafico useremo l'Evento "_MouseMove()" che viene sollevato quando il mouse, stando all'interno dell' | + | Per effettuare lo spostamento dell'Oggetto grafico useremo l'Evento "_MouseMove()" che viene sollevato quando il mouse, stando all'interno dell'Oggetto grafico, viene spostato, mentre un tasto del mouse è tenuto premuto. |
=Semplice spostamento= | =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 | + | 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 grafico da spostare. |
− | ==Spostamento con riferimento alle | + | ==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 x As Short | Private x As Short | ||
Riga 27: | Riga 27: | ||
End | End | ||
− | ===Usando la Proprietà ".Tag" dell'Oggetto da spostare=== | + | ====Usando la Proprietà ".Tag" dell'Oggetto grafico da spostare==== |
− | Se non si intende utilizzare alcuna variabile ''globale'', sarà possibile servirsi - ad esempio - della | + | Se non si intende utilizzare alcuna variabile ''globale'', sarà possibile servirsi - ad esempio - della Proprietà ".Tag" dell'Oggetto grafico 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 56: | Riga 56: | ||
==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, <SPAN Style="text-decoration:underline">bensì al ''Contenitore'' dell'Oggetto grafico da spostare</span>. |
<BR>Nell'esempio che segue, altresì, in particolare il puntatore del mouse durante lo spostamento del ''Controllo'' grafico resterà nel punto interno all'Oggetto, ove si è cliccato. | <BR>Nell'esempio che segue, altresì, in particolare il puntatore del mouse durante lo spostamento del ''Controllo'' grafico resterà nel punto interno all'Oggetto, ove si è cliccato. | ||
Private x As Short | Private x As Short | ||
Riga 119: | Riga 119: | ||
=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 grafico (nell'esempio: un ''Button'') dal ''Form'' in un ''Panel'' con conseguente <SPAN Style="text-decoration:underline">modifica della sua Proprietà ".Parent"</span>: |
Private x As Short | Private x As Short | ||
Private y As Short | Private y As Short |
Versione delle 12:30, 10 giu 2023
Vedremo di seguito come spostare un oggetto all'interno di un Contenitore senza l'uso del Drag 'n Drop. [nota 1]
Per effettuare lo spostamento dell'Oggetto grafico useremo l'Evento "_MouseMove()" che viene sollevato quando il mouse, stando all'interno dell'Oggetto grafico, viene spostato, mentre un tasto del mouse è tenuto premuto.
Indice
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 grafico 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 grafico da spostare
Se non si intende utilizzare alcuna variabile globale, sarà possibile servirsi - ad esempio - della Proprietà ".Tag" dell'Oggetto grafico 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: With Button1 .Move(Mouse.ScreenX - Me.ScreenX - .Tag[0], 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 grafico da spostare.
Nell'esempio che segue, altresì, in particolare il puntatore del mouse durante lo spostamento del Controllo grafico resterà nel punto interno all'Oggetto, ove si è cliccato.
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: With 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
Spostare un Oggetto grafico all'interno di un Contenitore entro un limite minimo e un limite massimo di coordinate x,y
Nel seguente esempio sarà possibile spostare un Button esclusivamente in verticale fra le coordinate 10 e 200 dell'asse delle "Y".
Private Const LIMITE_MINIMO As Byte = 10 Private Const LIMITE_MASSIMO As Byte = 200 Private x As Short Private y As Short Public Sub Form_Open() Button1.Text = CStr(Button1.Y) End Public Sub Button1_MouseDown() x = Mouse.X y = Mouse.Y End Public Sub Button1_MouseMove() With Button1 If (Not ((.Y + Mouse.Y - y) < LIMITE_MINIMO)) And (Not ((.Y + Mouse.Y - y) > LIMITE_MASSIMO)) Then .Move(.X, .Y + Mouse.Y - y) .Text = CStr(.Y) Endif End With End
Spostamento in altro contenitore e modifica della proprietà Parent
Il caso che segue prevede lo spostamento di un Oggetto grafico (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
Nota
[1] Vedere anche: Spostare con il mouse un Controllo grafico generato in una DrawingArea