Alla luce delle nuove conoscenze offerte da
vuott qui,
qui e
qui e da
Shell della comunità Spagnola posto a seguire il codice per una nuova versione di Ruota Testo.
Unica cosa, sarà la febbre, io non riesco a capire come possa il disegno partire bene se non conosce la sua posizione. Infatti Resize, che viene lanciato all'apertura, attiva il disegno
Sono d'accordo con
Shell è un vero peccato non riuscire a comunicare facilmente per colpa della Babele europea, io ho già grande difficoltà a capire la programmazione in Italiano
Nota: In una Form di circa 600x600 poniamo una
DrawingArea denominata
da e quattro pulsanti (
Button) con le seguenti proprietà:
In
Group di tutti e quattro scriviamo
Posizione.
In
Text scriviamo rispettivamente
Centro,
Testa,
Coda,
Esterno.
In
Tag scriviamo rispettivamente
0,
1,
2,
3.
Agendo sui tasti freccia vedremo la rotazione il cui fulcro è il centro del disegno.
' Gambas class file
'' Alla luce delle nuove conoscenze offerte da vuott e Shell della comunità Spagnola ecco una nuova versione
'' della rappresentazione di come agisce la rotazione del testo in un'area di disegno.
'' Dimostra che la rotazione è data dai valori presenti nei metodi Traslate relativi
'' alle misure dell'area di disegno e a quelle del testo.
'' E' come se il fulcro di Translate agisse da vortice, a seconda di dove si pone
'' nel vortice il testo ruoterà.
'' Occorre disegnare la drawingarea denominata da e quattro button con queste proprietà:
'' Group: Posizione (per tutti e quattro i button)
'' Text: Rispettivamente Centro, Testa, Coda, Esterno
'' Tag: Rispettivamente 0, 1, 2, 3
'' NOTA: Il testo ruota agendo sulle frecce giù, su, destra, sinistra
'' Creato con Gambas3 3.7.1
Private fRaggio As Float ' Memorizza la lunghezza del raggio del cerchio entro cui ruota la scritta.
Private xArc As Float ' Memorizza il centro del cerchio.
Private yArc As Float ' Idem
Private x As Float ' Memorizza l'inizio della scritta.
Private y As Float ' Idem
Private iAlt As Integer ' Memorizza l'altezza della scritta.
Private iLarg As Integer ' Memorizza la larghezza della scritta.
Private sTesto As String ' Memorizza la scritta.
Private fAngolo As Float ' Memorizza i gradi dell'angolo
Private sPos As String ' Memorizza il tipo di rotazione se con perno centrale, di testa o di coda.
Private fSopra1 As Float ' Memorizza la posizione di partenza orizzontale della rotazione.
Private fSopra2 As Float ' Memorizza la posizione di partenza verticale della rotazione.
Private fSotto1 As Float ' Memorizza la posizione di arrivo orizzontale della rotazione.
Private fSotto2 As Float ' Memorizza la posizione di arrivo verticale della rotazione.
Private bOk As Boolean ' Booleano che se vero consente il disegno sulla DrawigArea.
Public Sub Form_Open()
sTesto = "Testo di prova"
sPos = "Center"
Me.Center
End
Public Sub Posizione_Click()
Select Case Last.Tag
Case 0
sPos = "Center"
Case 1
sPos = "Testa"
Case 2
sPos = "Coda"
Case 3
sPos = "Esterna"
End Select
attivaDisegno()
End
Public Sub Form_KeyPress()
Select Case Key.Code
Case Key.Up, Key.Left
fAngolo += 1
If fAngolo = 361 Then fAngolo = 1
attivaDisegno()
Case Key.Down, Key.Right
fAngolo -= 1
If fAngolo = -361 Then fAngolo = -1
attivaDisegno()
End Select
End
Public Sub Form_Resize() ' Con questo evento se cambia la dimensione del Form, il disegna non va perso.
attivaDisegno()
End
Public Sub attivaDisegno()
bOk = True
da.Clear
da.Refresh
End
Public Sub da_Draw()
' Se booleano "bOk" vero raccoglie tutti i dati e le misure occorrenti
' per poter disegnare testo e cerchio nell'area di disegno:
If bOk Then
With Paint
.Begin(da)
.Font.Size = ridimensiona(22)
iLarg = .Font.RichTextWidth(sTesto)
iAlt = .Font.RichTextHeight(sTesto)
Select Case sPos
' Se la rotazione è centrale, posiziona il testo al centro dell'area di
' disegno così come le misure di partenza e arrivo e siccome la scritta
' ruota su se stessa da al raggio del cerchio mezza lunghezza del testo:
Case "Center"
x = CFloat((da.W / 2) - (iLarg / 2))
y = CFloat((da.H / 2) - (iAlt / 2))
fRaggio = CFloat(iLarg / 2)
' Se rotazione è di testa, posiziona l'inizio del testo al centro dell'area
' di disegno così come le misure di partenza e arrivo e siccome la scritta
' ruota come un raggio da al raggio del cerchio la lunghezza del testo:
Case "Testa"
x = CFloat((da.W / 2))
y = CFloat((da.H / 2) - (iAlt / 2))
fRaggio = CFloat(iLarg)
' Se rotazione è di coda, posiziona la fine del testo al centro dell'area
' di disegno così come le misure di partenza e arrivo e siccome la scritta
' ruota come un raggio da al raggio del cerchio la lunghezza del testo:
Case "Coda"
x = CFloat((da.W / 2) - iLarg)
y = CFloat((da.H / 2) - (iAlt / 2))
fRaggio = CFloat(iLarg)
' Se rotazione è esterna, posiziona l'inizio del testo a fine raggio del cerchio,
' sempre al centro dell'area di disegno le misure di partenza e arrivo:
Case "Esterna"
x = CFloat((da.W / 2) + (iLarg / 2))
y = CFloat((da.H / 2) - (iAlt / 2))
fRaggio = CFloat(iLarg / 2)
End Select
' In questa dimostrazione il fulcro (vortice) è sempre il centro
' dell'area di disegno:
xArc = CFloat((da.W / 2))
yArc = CFloat(da.H / 2)
fSopra1 = CFloat((da.W / 2))
fSopra2 = CFloat(da.H / 2)
fSotto1 = CFloat(- (da.W / 2))
fSotto2 = CFloat(- (da.H / 2))
' Vortice:
.Translate(fSopra1, fSopra2)
.Rotate(Rad(fAngolo))
.Translate(fSotto1, fSotto2)
' Testo:
.DrawText(sTesto, x, y, iLarg, iAlt)
'.Text(sTesto, x, y, iLarg, iAlt)
'.Fill
' Arco:
.Arc(xArc, yArc, fRaggio)
.Stroke
.End
End With
bOk = False
Endif
End
Public Sub ridimensiona(size As Float) As Float
' Proporziona il testo nell'area di disegno
If Paint.Device = da Then
Return (size * 0.744)
Else
Return size
Endif
End