Differenze tra le versioni di "Spostare con il mouse il testo in una DrawingArea"
Da Gambas-it.org - Wikipedia.
Riga 2: | Riga 2: | ||
− | Il primo codice più semplice e basilare per effettuare uno spstamento nella ''DrawingArea'': | + | Il '''primo''' codice più semplice e basilare per effettuare uno spstamento nella ''DrawingArea'': |
Private x As Integer | Private x As Integer | ||
Private y As Integer | Private y As Integer | ||
− | <FONT color= | + | <FONT color=gray>' ''Gestisce l'evento della pressione del tasto del mouse sulla DrawingArea:''</font> |
'''Public''' Sub DrawingArea1_MouseDown() | '''Public''' Sub DrawingArea1_MouseDown() | ||
− | x = Mouse.X <FONT color= | + | x = Mouse.X <FONT color=gray>' ''prende la coordinata x del punto ove si trova il mouse in quel momento''</font> |
− | y = Mouse.Y <FONT color= | + | y = Mouse.Y <FONT color=gray>' ''prende la coordinata y del punto ove si trova il mouse in quel momento''</font> |
'''End''' | '''End''' | ||
− | <FONT color= | + | <FONT color=gray>' ''Gestisce l'evento dello spostamento del mouse sulla DrawingArea''</font> |
'''Public''' Sub DrawingArea1_MouseMove() | '''Public''' Sub DrawingArea1_MouseMove() | ||
Riga 30: | Riga 30: | ||
With Paint | With Paint | ||
− | .Begin(DrawingArea1) <FONT color= | + | .Begin(DrawingArea1) <FONT color=gray>' ''attiva la DrawingArea''</font> |
.Font.Size = 22 | .Font.Size = 22 | ||
− | .DrawText("abc", x, y) <FONT color= | + | .DrawText("abc", x, y) <FONT color=gray>' ''è il testo che andremo a spostare nella DrawingArea''</font> |
.End | .End | ||
End With | End With | ||
Riga 39: | Riga 39: | ||
− | Il secondo codice, più complesso, | + | |
+ | Il '''secondo''' codice, più complesso, consente di spostare il testo senza sbalzi e spostamenti indesiderati rispetto alla posizione del testo e del mouse: |[[#Note|1]]| | ||
+ | Private bOk As Boolean <FONT color=gray>' ''Booleano attivo se puntatore è in area scritta''</font> | ||
+ | Private bDis As Boolean <FONT color=gray>' ''Booleano attivo se dati provengono da Form_Open''</font> | ||
+ | Private xIn As Integer <FONT color=gray>' ''Memorizza la posizione del testo al momento che agiamo sul tasto sinistro del mouse''</font> | ||
+ | Private yIn As Integer <FONT color=gray>' ''Idem''</font> | ||
+ | Private xDif As Integer <FONT color=gray>' ''Memorizza la distanza tra la posizione del puntatore e quella del testo''</font> | ||
+ | Private yDif As Integer <FONT color=gray>' ''Idem''</font> | ||
+ | Private x As Integer <FONT color=gray>' ''Memorizza la posizione del puntatore''</font> | ||
+ | Private y As Integer <FONT color=gray>' ''Idem''</font> | ||
+ | Private iAlt As Integer <FONT color=gray>' ''Memorizza l'altezza del testo''</font> | ||
+ | Private iLarg As Integer <FONT color=gray>' ''Memorizza la larghezza del testo''</font> | ||
+ | Private sTesto As String <FONT color=gray>' ''Memorizza la scritta del testo''</font> | ||
+ | |||
+ | |||
+ | '''Public''' Sub Form_Open() | ||
+ | |||
+ | <FONT color=gray>' ''Inserisce il testo al centro dell'area di disegno dando le giuste indicazioni a DrawingArea1_Draw:''</font> | ||
+ | sTesto = "Testo di prova" | ||
+ | bDis = True | ||
+ | bOk = True | ||
+ | DrawingArea1.Refresh | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | '''Public''' Sub DrawingArea1_MouseDown() | ||
+ | |||
+ | <FONT color=gray>' ''Quando si preme il tasto sinistro passa la posizione del mouse alle variabili x e y:''</font> | ||
+ | x = Mouse.X | ||
+ | y = Mouse.Y | ||
+ | <FONT color=gray>' ''Ottiene la differenza fra le posizioni x e y del testo rispetto a quelle del mouse:''</font> | ||
+ | xDif = xIn - x | ||
+ | yDif = yIn - y | ||
+ | <FONT color=gray>' ''Si accerta che il booleano OK sia su false:''</font> | ||
+ | bOk = False | ||
+ | <FONT color=gray>' ''Se il mouse si trova nell'area della scritta cambia aspetto e porta il booleano OK a vero:''</font> | ||
+ | If x >= xIn And x <= (xIn + iLarg) Then | ||
+ | If y <= yIn And y >= (yIn - iAlt) Then | ||
+ | DrawingArea1.Mouse = Mouse.SizeAll | ||
+ | bOk = True | ||
+ | Endif | ||
+ | Endif | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | '''Public''' Sub DrawingArea1_MouseMove() | ||
+ | |||
+ | <FONT color=gray>' ''Se il booleano OK è vero passa alle variabili la posizione e attiva il disegno:''</font> | ||
+ | If bOk Then | ||
+ | x = Mouse.X | ||
+ | y = Mouse.Y | ||
+ | DrawingArea1.Refresh | ||
+ | Endif | ||
+ | |||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | '''Public''' Sub DrawingArea1_Draw() | ||
+ | |||
+ | <FONT color=gray>' ''Se il booleano OK è vero, passa a controllare il booleano eventualmente attivato da "Form_Open".'' | ||
+ | ' ''Se quest 'ultimo è vero crea il testo scritto nella textbox al centro dell'area di disegno,'' | ||
+ | ' ''altrimenti disegna il testo sulle indicazioni del mouse:''</font> | ||
+ | If bOk Then | ||
+ | With Paint | ||
+ | .Begin(DrawingArea1) | ||
+ | .Font.Size = ridimensiona(22) | ||
+ | If bDis Then | ||
+ | iLarg = .Font.RichTextWidth(sTesto) | ||
+ | x = (DrawingArea1.W / 2) - (iLarg / 2) | ||
+ | xIn = x | ||
+ | iAlt = .Font.RichTextHeight(sTesto) | ||
+ | y = (DrawingArea1.H / 2) + (iAlt / 2) | ||
+ | yIn = y | ||
+ | bDis = False | ||
+ | Endif | ||
+ | .DrawText(sTesto, x + xDif, y + yDif) | ||
+ | .End | ||
+ | End With | ||
+ | Endif | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | '''Public''' Sub DrawingArea1_MouseUp() | ||
+ | |||
+ | <FONT color=gray>' ''Quando si rilascia il bottone del mouse cambia l'aspetto del mouse a quello di default'' | ||
+ | ' ''e memorizza nelle variabili la posizione iniziale della scritta per essere pronti al nuovo trascinamento:''</font> | ||
+ | DrawingArea1.Mouse = Mouse.Default | ||
+ | xIn = x + xDif | ||
+ | yIn = y + yDif | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | '''Public''' Sub ridimensiona(size As Float) As Float | ||
+ | |||
+ | <FONT color=gray>' ''Proporziona il testo nell'area di disegno:''</font> | ||
+ | If Paint.Device = DrawingArea1 Then | ||
+ | Return (size * 0.744) | ||
+ | Else | ||
+ | Return size | ||
+ | Endif | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | =Note= | ||
+ | [1] Il codice è stato realizzato dall'utente [http://www.gambas-it.org/smf/index.php?action=profile;u=1249''Gianluigi''] del forum ''www.gambas-it.org''. |
Versione delle 08:37, 1 giu 2014
Mostreremo due codici per spostare con il mouse un testo all'interno di una DrawingArea.
Il primo codice più semplice e basilare per effettuare uno spstamento nella DrawingArea:
Private x As Integer Private y As Integer ' Gestisce l'evento della pressione del tasto del mouse sulla DrawingArea: Public Sub DrawingArea1_MouseDown() x = Mouse.X ' prende la coordinata x del punto ove si trova il mouse in quel momento y = Mouse.Y ' prende la coordinata y del punto ove si trova il mouse in quel momento End ' Gestisce l'evento dello spostamento del mouse sulla DrawingArea Public Sub DrawingArea1_MouseMove() x = Mouse.X y = Mouse.Y End Public Sub DrawingArea1_Draw() DrawingArea1.Refresh With Paint .Begin(DrawingArea1) ' attiva la DrawingArea .Font.Size = 22 .DrawText("abc", x, y) ' è il testo che andremo a spostare nella DrawingArea .End End With End
Il secondo codice, più complesso, consente di spostare il testo senza sbalzi e spostamenti indesiderati rispetto alla posizione del testo e del mouse: |1|
Private bOk As Boolean ' Booleano attivo se puntatore è in area scritta Private bDis As Boolean ' Booleano attivo se dati provengono da Form_Open Private xIn As Integer ' Memorizza la posizione del testo al momento che agiamo sul tasto sinistro del mouse Private yIn As Integer ' Idem Private xDif As Integer ' Memorizza la distanza tra la posizione del puntatore e quella del testo Private yDif As Integer ' Idem Private x As Integer ' Memorizza la posizione del puntatore Private y As Integer ' Idem Private iAlt As Integer ' Memorizza l'altezza del testo Private iLarg As Integer ' Memorizza la larghezza del testo Private sTesto As String ' Memorizza la scritta del testo Public Sub Form_Open() ' Inserisce il testo al centro dell'area di disegno dando le giuste indicazioni a DrawingArea1_Draw: sTesto = "Testo di prova" bDis = True bOk = True DrawingArea1.Refresh End Public Sub DrawingArea1_MouseDown() ' Quando si preme il tasto sinistro passa la posizione del mouse alle variabili x e y: x = Mouse.X y = Mouse.Y ' Ottiene la differenza fra le posizioni x e y del testo rispetto a quelle del mouse: xDif = xIn - x yDif = yIn - y ' Si accerta che il booleano OK sia su false: bOk = False ' Se il mouse si trova nell'area della scritta cambia aspetto e porta il booleano OK a vero: If x >= xIn And x <= (xIn + iLarg) Then If y <= yIn And y >= (yIn - iAlt) Then DrawingArea1.Mouse = Mouse.SizeAll bOk = True Endif Endif End Public Sub DrawingArea1_MouseMove() ' Se il booleano OK è vero passa alle variabili la posizione e attiva il disegno: If bOk Then x = Mouse.X y = Mouse.Y DrawingArea1.Refresh Endif End Public Sub DrawingArea1_Draw() ' Se il booleano OK è vero, passa a controllare il booleano eventualmente attivato da "Form_Open". ' Se quest 'ultimo è vero crea il testo scritto nella textbox al centro dell'area di disegno, ' altrimenti disegna il testo sulle indicazioni del mouse: If bOk Then With Paint .Begin(DrawingArea1) .Font.Size = ridimensiona(22) If bDis Then iLarg = .Font.RichTextWidth(sTesto) x = (DrawingArea1.W / 2) - (iLarg / 2) xIn = x iAlt = .Font.RichTextHeight(sTesto) y = (DrawingArea1.H / 2) + (iAlt / 2) yIn = y bDis = False Endif .DrawText(sTesto, x + xDif, y + yDif) .End End With Endif End Public Sub DrawingArea1_MouseUp() ' Quando si rilascia il bottone del mouse cambia l'aspetto del mouse a quello di default ' e memorizza nelle variabili la posizione iniziale della scritta per essere pronti al nuovo trascinamento: DrawingArea1.Mouse = Mouse.Default xIn = x + xDif yIn = y + yDif End Public Sub ridimensiona(size As Float) As Float ' Proporziona il testo nell'area di disegno: If Paint.Device = DrawingArea1 Then Return (size * 0.744) Else Return size Endif End
Note
[1] Il codice è stato realizzato dall'utente Gianluigi del forum www.gambas-it.org.