Differenze tra le versioni di "Adattare la dimensione di un Oggetto grafico al testo contenuto"

Da Gambas-it.org - Wikipedia.
Riga 110: Riga 110:
  
 
=Note=
 
=Note=
[1] Vedere anche questa pagina: [[Ridurre in un Oggetto grafico o di testo la dimensione del font se il testo ha una lunghezza superiore a quella dell'Oggetto]]
+
[1] Vedere anche questa pagina: [[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]]
  
 
[2] Questo primo codice è stato proposto dal membro [https://www.gambas-it.org/smf/index.php?action=profile;u=1249 Gianluigi] del forum www.gambas-it.org.
 
[2] Questo primo codice è stato proposto dal membro [https://www.gambas-it.org/smf/index.php?action=profile;u=1249 Gianluigi] del forum www.gambas-it.org.

Versione delle 16:11, 25 giu 2023

La presente pagina considera i Controlli grafici (widget) che posseggono la Proprietà ".Text" o similare, alla quale assegnare una stringa di testo, ma non sono costituiti da un'area di testo. [nota 1]

Per adattare la dimensione di un Oggetto grafico al testo in esso contenuto, si possono adottare almeno i seguenti codici:

Il primo codice possibile: [nota 2]

Public Sub Form_Open()

 Dim hButton As Button

 With Me
   .W = 500
   .H = 500
 End With
 With hButton = New Button(Me) As "Button"
   .X = 10
   .Y = 100
   .W = 10
   .H = 10
   .AutoResize = True
   .Text = "Il testo del Button1"
 End With
 With hButton = New Button(Me) As "Button"
   .X = 10
   .Y = 200
   .W = 10
   .H = 10
   .AutoResize = True
   .Text = "Il testo di Button2\nSu\nTre righe"
 End With

End


Public Sub Button_Click()

 Dim i As Integer

 Last.Font.Size = 24
 Last.Font.Bold = True
 i = ControlHeight(Last.Text, Last.Font)
 If i > 0 Then Last.H = i

End

Private Function ControlHeight(sText As String, hFont As Font) As Integer

 Dim i As Integer
 Dim DS As Integer = Desktop.Scale

' Ottengo le righe meno 1:
 If String.InStr(sText, "\n") > 0 Then 
   i = Split(sText, "\n").Max
 Else If String.InStr(sText, "<br>") > 0 Then
   i = Split(sText, "<br>").Max
 Else 
   Return 0
 Endif
 Return ((i + 1) * hFont.Height) + (DS * 2)

End

Di seguito il secondo codice, nel quale, per evitare che il testo non sia sufficientemente distante dai bordi del Controllo e quindi non sia ben visibile, si sommerà alla dimensione orizzontale (lunghezza) delControllo il valore ritornato da "Desktop.Scale":

Public Sub Form_Open()

 Button1.Text = "aaaaaa bbbbbb cc dddddd eeeeee"
 Button1.W = Button1.Font.TextWidth(Button1.Text) + Desktop.Scale

End

In quest'altro esempio si prenderanno inconsiderazione sia la lunghezza che l'altezza del Controllo; si farà uso altresì della Classe Rect, per individuare l'area occupata dal testo contenuto dal Controllo:

Private Const TESTO As String = "Il testo di Button\nSu\nTre righe"


Public Sub Form_Open()

 Dim hButton As Button
 Dim rc As Rect

 With Me
   .W = 500
   .H = 500
 End With
 With hButton = New Button(Me) As "Button"
   .X = 10
   .Y = 200
   rc = .Font.TextSize(TESTO)
   .W = rc.W + Desktop.Scale
   .H = rc.H + Desktop.Scale
   .Text = TESTO
 End With

End


Public Sub Button_Click()

 Dim rc As Rect
 
 With Last
' Incrementa la dimensione del "font":
   .Font.Size = 24
   .Font.Bold = True
   rc = .Font.TextSize(TESTO)
   .W = rc.W + Desktop.Scale
   .H = rc.H + Desktop.Scale
 .Text = TESTO
 End With 

End


Note

[1] Vedere anche questa pagina: 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

[2] Questo primo codice è stato proposto dal membro Gianluigi del forum www.gambas-it.org.