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

Da Gambas-it.org - Wikipedia.
 
(10 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
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. <SUP>&#091;[[#Note|nota 1]]&#093;</sup>
 
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. <SUP>&#091;[[#Note|nota 1]]&#093;</sup>
 
   
 
   
Per adattare la dimensione di un Oggetto grafico al testo in esso contenuto, si possono adottare almeno i seguenti codici:
+
Per adattare la dimensione di un Oggetto grafico al testo in esso contenuto, si possono adottare le seguenti modalità.
  
Il primo codice possibile: <SUP>&#091;[[#Note|nota 2]]&#093;</sup>
+
==Uso dei Metodi ".TextWidth()" e ".TextHeight()"==
 +
I Metodi ".TextWidth()" e ".TextHeight()" della Proprietà ".Font" del Controllo impostano la dimensione di questo in base alla misura dei caratteri usati.
 +
 
 +
Mostriamo di seguito un semplice esempio, nel quale si creerà una ''Label'' sul ''Form'', adattandone con i Metodi in questione la dimensione alla quantità e all'altezza dei caratteri assegnati alla sua Proprietà ".Text":
 +
Private Label1 As Label
 +
 +
 +
Public Sub Form_Open()
 +
 +
  With Label1 = New Label(Me) As "Label1"
 +
    .Text = "Label pQqJj/|]"
 +
    .W = .Font.TextWidth(.Text)
 +
    .H = .Font.TextHeight(.Text)
 +
    .X = 50
 +
    .Y = 50
 +
    .Background = Color.Yellow
 +
  End With
 +
 +
End
 +
Se al precedente esempio aggiungiamo la seguente routine, cliccando sulla ''Label'' vedremo la dimensione del Controllo adattarsi all'aumentare della misura del font.
 +
Public Sub Label1_MouseUp()
 +
 +
  For b As Byte = 7 To 30
 +
    With Label1
 +
      .Font.Size = b
 +
      .W = .Font.TextWidth(.Text)
 +
      .H = .Font.TextHeight(.Text)
 +
    End With
 +
    Wait 0.5
 +
  Next
 +
 +
End
 +
 
 +
 
 +
==Evitare che il testo non sia sufficientemente distante dai bordi del Controllo==
 +
Per evitare che il testo non sia sufficientemente distante dai bordi del ''Controllo'' e quindi non sia ben visibile, si potrà sommare alla dimensione orizzontale (lunghezza) o verticale (altezza) del ''Controllo'' il valore ritornato da "[https://gambaswiki.org/wiki/comp/gb.qt4/desktop/scale?l=it Desktop.Scale]".
 +
<BR>Esempio:
 +
Label1.W = Label1.Font.TextWidth(Label1.Text) <FONT Color=#B22222>+ Desktop<B>.Scale</b></font>
 +
 
 +
 
 +
==Uso del Metodo ".TextSize()"==
 +
Questa modalità prende in considerazione il Metodo ".TextSize()" della Proprietà ".Font" del Controllo:
 +
Private Label1 As Label
 +
 +
 +
Public Sub Form_Open()
 +
 +
  With Label1 = New Label(Me) As "Label1"
 +
    .Text = "Label pQqJj/|]\nLabel pQqJj/|]\nLabel pQqJj/|]"
 +
    .W = .Font.TextSize(.Text).W
 +
    .H = .Font.TextSize(.Text).H
 +
    .X = (Me.W / 2) - (Label1.W / 2)
 +
    .Y = (Me.H / 2) - (Label1.H / 2)
 +
    .Background = Color.Yellow
 +
  End With
 +
 +
End
 +
 +
 +
Public Sub Label1_MouseUp()
 +
 +
  For b As Byte = 7 To 30
 +
    With Label1
 +
      .Font.Size = b
 +
      .W = .Font.TextSize(.Text).W
 +
      .H = .Font.TextSize(.Text).H
 +
    End With
 +
    Wait 0.5
 +
  Next
 +
 +
End
 +
 
 +
 
 +
==Uso della Classe ''Rect''==
 +
Per adattare la dimensione del controllo grafico al testo contenuto, è possibile fare uso della Classe ''Rect'', per individuare l'area occupata dal testo contenuto dal ''Controllo''.
 +
 
 +
Mostriamo un esempio, nel quale si considereranno la lunghezza e l'altezza del ''Controllo''. In particolare cliccando sul ''Button'', la dimensione complessiva di questo Controllo si adatterà al previsto cambiamento della dimensione del font. 
 +
Private Const TESTO As String = "Il testo di Button\nSu\nTre righe"
 +
 +
 +
Public Sub Form_Open()
 +
 +
  Dim bt As Button
 +
  Dim <FONT Color=darkgreen>rc</font> As Rect
 +
 +
  With Me
 +
    .W = 500
 +
    .H = 500
 +
  End With
 +
  With bt = New Button(Me) As "Tasto"
 +
    .X = 10
 +
    .Y = 200
 +
    rc = .Font.TextSize(TESTO)
 +
    .W = <FONT Color=darkgreen>rc</font>.W <FONT Color=#B22222>+ Desktop<B>.Scale</b></font>
 +
    .H = <FONT Color=darkgreen>rc</font>.H <FONT Color=#B22222>+ Desktop<B>.Scale</b></font>
 +
    .Text = TESTO
 +
  End With
 +
 +
End
 +
 +
 +
Public Sub Tasto_Click()
 +
 +
  Dim <FONT Color=darkgreen>rc</font> As Rect
 +
 
 +
  With Last
 +
<FONT Color=gray>' ''Incrementa la dimensione del "font":''</font>
 +
    .Font.Size = 24
 +
    .Font.Bold = True
 +
    rc = .Font.TextSize(TESTO)
 +
    .W = <FONT Color=darkgreen>rc</font>.W <FONT Color=#B22222>+ Desktop<B>.Scale</b></font>
 +
    .H = <FONT Color=darkgreen>rc</font>.H <FONT Color=#B22222>+ Desktop<B>.Scale</b></font>
 +
  .Text = TESTO
 +
  End With
 +
 +
End
 +
 
 +
 
 +
==Adattamento <U>automatico</u> mediante l'uso della Proprietà ".AutoResize"==
 +
L'uso della Proprietà ".AutoResize" dell'Oggetto di testo consente l'adattamento automatico del Controllo alle dimensione del font del testo contenuto, senza l'uso di ulteriori risorse del Controllo medesimo. A essa va assegnato il valore booleano "True".
 +
 
 +
Mostriamo un esempio essenziale:
 +
Private Label1 As Label
 +
 +
 +
Public Sub Form_Open()
 +
 +
  With Label1 = New Label(Me) As "Label1"
 +
    .Text = "Label pQqJj/|]\nLabel pQqJj/|]\nLabel pQqJj/|]"
 +
    .X = 50
 +
    .Y = 50
 +
  .Background = Color.Yellow
 +
  <FONT Color=red><B>.AutoResize</b></font> = <FONT Color=green><B>True</b></font>
 +
  End With
 +
 +
End
 +
 +
 +
Public Sub Label1_MouseUp()
 +
 +
  For b As Byte = 7 To 30
 +
    With Label1
 +
      .Font.Size = b
 +
      .Resize(Desktop.Scale, Desktop.Scale)
 +
    End With
 +
    Wait 0.5
 +
  Next
 +
 +
End
 +
In quest'altro esempio <SUP>&#091;[[#Note|nota 2]]&#093;</sup> avverrà un adattamento automatico del Controllo al modificarsi della dimensione del font:
 
  Public Sub Form_Open()
 
  Public Sub Form_Open()
 
   
 
   
Riga 17: Riga 166:
 
     .W = 10
 
     .W = 10
 
     .H = 10
 
     .H = 10
     .AutoResize = True
+
     <FONT Color=red><B>.AutoResize</b></font> = <FONT Color=green><B>True</b></font>
 
     .Text = "Il testo del Button1"
 
     .Text = "Il testo del Button1"
 
   End With
 
   End With
Riga 25: Riga 174:
 
     .W = 10
 
     .W = 10
 
     .H = 10
 
     .H = 10
     .AutoResize = True
+
     <FONT Color=red><B>.AutoResize</b></font> = <FONT Color=green><B>True</b></font>
 
     .Text = "Il testo di Button2\nSu\nTre righe"
 
     .Text = "Il testo di Button2\nSu\nTre righe"
 
   End With
 
   End With
Riga 57: Riga 206:
 
   Endif
 
   Endif
 
   Return ((i + 1) * hFont.Height) + (DS * 2)
 
   Return ((i + 1) * hFont.Height) + (DS * 2)
 
End
 
Di seguito il secondo codice, nel il quale, per evitare che il testo non sia sufficientemente distante dai bordi del ''Controllo'' e quindi non sia ben visibile, si sommerà alla dimensione del''Controllo'' il valore ritornato da "[https://gambaswiki.org/wiki/comp/gb.qt4/desktop/scale?l=it Desktop.Scale]":
 
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
 
<FONT Color=gray>' ''Incrementa la dimensione del "font":''</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
 
  End
Riga 103: Riga 212:
  
 
=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 attuale delle 03:30, 16 dic 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 le seguenti modalità.

Uso dei Metodi ".TextWidth()" e ".TextHeight()"

I Metodi ".TextWidth()" e ".TextHeight()" della Proprietà ".Font" del Controllo impostano la dimensione di questo in base alla misura dei caratteri usati.

Mostriamo di seguito un semplice esempio, nel quale si creerà una Label sul Form, adattandone con i Metodi in questione la dimensione alla quantità e all'altezza dei caratteri assegnati alla sua Proprietà ".Text":

Private Label1 As Label


Public Sub Form_Open()

 With Label1 = New Label(Me) As "Label1"
   .Text = "Label pQqJj/|]"
   .W = .Font.TextWidth(.Text)
   .H = .Font.TextHeight(.Text)
   .X = 50
   .Y = 50
   .Background = Color.Yellow
 End With

End

Se al precedente esempio aggiungiamo la seguente routine, cliccando sulla Label vedremo la dimensione del Controllo adattarsi all'aumentare della misura del font.

Public Sub Label1_MouseUp()

 For b As Byte = 7 To 30
   With Label1
     .Font.Size = b
     .W = .Font.TextWidth(.Text)
     .H = .Font.TextHeight(.Text)
   End With
   Wait 0.5
 Next 

End


Evitare che il testo non sia sufficientemente distante dai bordi del Controllo

Per evitare che il testo non sia sufficientemente distante dai bordi del Controllo e quindi non sia ben visibile, si potrà sommare alla dimensione orizzontale (lunghezza) o verticale (altezza) del Controllo il valore ritornato da "Desktop.Scale".
Esempio:

Label1.W = Label1.Font.TextWidth(Label1.Text) + Desktop.Scale


Uso del Metodo ".TextSize()"

Questa modalità prende in considerazione il Metodo ".TextSize()" della Proprietà ".Font" del Controllo:

Private Label1 As Label


Public Sub Form_Open()

 With Label1 = New Label(Me) As "Label1"
   .Text = "Label pQqJj/|]\nLabel pQqJj/|]\nLabel pQqJj/|]"
   .W = .Font.TextSize(.Text).W
   .H = .Font.TextSize(.Text).H
   .X = (Me.W / 2) - (Label1.W / 2)
   .Y = (Me.H / 2) - (Label1.H / 2)
   .Background = Color.Yellow
 End With

End


Public Sub Label1_MouseUp()

 For b As Byte = 7 To 30
   With Label1
     .Font.Size = b
     .W = .Font.TextSize(.Text).W
     .H = .Font.TextSize(.Text).H
   End With 
   Wait 0.5
 Next 

End


Uso della Classe Rect

Per adattare la dimensione del controllo grafico al testo contenuto, è possibile fare uso della Classe Rect, per individuare l'area occupata dal testo contenuto dal Controllo.

Mostriamo un esempio, nel quale si considereranno la lunghezza e l'altezza del Controllo. In particolare cliccando sul Button, la dimensione complessiva di questo Controllo si adatterà al previsto cambiamento della dimensione del font.

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


Public Sub Form_Open()

 Dim bt As Button
 Dim rc As Rect

 With Me
   .W = 500
   .H = 500
 End With
 With bt = New Button(Me) As "Tasto"
   .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 Tasto_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


Adattamento automatico mediante l'uso della Proprietà ".AutoResize"

L'uso della Proprietà ".AutoResize" dell'Oggetto di testo consente l'adattamento automatico del Controllo alle dimensione del font del testo contenuto, senza l'uso di ulteriori risorse del Controllo medesimo. A essa va assegnato il valore booleano "True".

Mostriamo un esempio essenziale:

Private Label1 As Label


Public Sub Form_Open()

 With Label1 = New Label(Me) As "Label1"
   .Text = "Label pQqJj/|]\nLabel pQqJj/|]\nLabel pQqJj/|]"
   .X = 50
   .Y = 50
 .Background = Color.Yellow
 .AutoResize = True
 End With

End


Public Sub Label1_MouseUp()

 For b As Byte = 7 To 30
   With Label1
     .Font.Size = b
     .Resize(Desktop.Scale, Desktop.Scale)
   End With 
   Wait 0.5
 Next 

End

In quest'altro esempio [nota 2] avverrà un adattamento automatico del Controllo al modificarsi della dimensione del font:

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


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.