Adattare la dimensione del font in un Oggetto grafico o di testo se il testo occupa una lunghezza o un'altezza superiore a quella dell'Oggetto

Da Gambas-it.org - Wikipedia.

Qualora il testo presente in un Controllo, che supporti la Proprietà ".Text" o ".RichText" occupi una lunghezza e/o un'altezza superiore a Controllo medesimo, e qualora si intenda lasciare inalterate le Proprietà ".Width" e ".Height" dell'Oggetto, allora si dovrà ridurre ovviamente la dimensione del font utilizzato. [nota 1]

Mostriamo un esempio adoperando un Oggetto Label :

Private label1 As Label
Private button1 As Button


Public Sub Form_Open()

 With Me
   .W = 340
   .H = 200
 End With
 
 With label1 = New Label(Me)
   .X = 20
   .Y = 10
   .W = 300
   .H = 50
   .Font.Size = 30
   .Text = "Testo qualsiasi aaaaaaaaa bb cc dddddd e ffffffff ggg hhhhhh l mmmmm\nSu\nTre righe"
   .Background = Color.Lighter(Color.Yellow)
 End With

 With button1 = New Button(Me) As "Button1"
   .X = Me.W - 100
   .Y = Me.h - 80
   .W = 80
   .H = 50
 End With
 
End


Public Sub Button1_Click()

 While (label1.W < label1.Font.TextWidth(label1.Text)) Or (label1.H < label1.Font.TextHeight(label1.Text))
' Decrementa il valore della misura del "Font" utilizzato per il testo:
   Dec label1.Font.Size
 Wend

End

L'ultima sub-routine può essere espressa anche usando la Classe Rect nel seguente modo:

 Dim rc As Rect

 rc = label1.Font.TextSize(label1.Text)

 While (label1.W < rc.W) Or (label1.H < rc.H)
   Dec label1.Font.Size
   rc = label1.Font.TextSize(label1.Text)
 Wend


Note

[1] Vedere anche questa pagina: Adattare la dimensione di un Oggetto grafico al testo contenuto