Adattare la dimensione di un Oggetto grafico al testo contenuto
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.