' Gambas module file
'' Nota occorre attivare il componente gb.gui o gb.gui.qt
Public Sub Main()
' Il programma va a leggere in settings della IDE i seguenti valori:
' [FMain]
' Geometry=[0,0,1854,1017,0]
' panProject=[False,297,True]
' panProperty=[False,357,True]
' panDebug=[False,112,True]
' FixedFont="Monospace,10"
' Se i pannelli sono attivi restituiscono False
'' NOTA: panDebug se è True significa che la finestra di debug è fluttuante
'' ATENZIONE che il codice non ne tiene conto.
Dim sPrint As String = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum."
Dim sConf, sFont As String
Dim aConf As String[]
Dim i, iWidth, iProject As Integer
Dim hFont As Font
If Exist("~/.config/gambas3/gambas3.conf") Then
sConf = File.Load("~/.config/gambas3/gambas3.conf")
If sConf Then
aConf = Split(sConf, "\n", Null, True)
i = aConf.Find("[FMain]")
If i <> -1 Then
iWidth = Val(Scan(aConf[i + 1], "*,*,*,*,*")[2])
Print iWidth
'Stop
If Scan(aConf[i + 4], "*[[]*,*")[1] = "False" Then
If Scan(aConf[i + 2], "*[[]*,*")[1] = "False" Then
iProject = Val(Scan(aConf[i + 2], "*[[]*,*,*")[2])
Print iProject
iProject += (iProject * 40 / 100)
Print iProject
iWidth -= iProject
Endif
Endif
Endif
i = aConf.Find("FixedFont*", gb.Like)
If i <> -1 Then
'sFont = UnQuote(Scan(aConf[i], "*=*")[1])
sFont = Scan(aConf[i], "*\"*\"")[1]
hFont = Font[sFont]
Endif
Endif
Endif
aConf = RowsPrint(sPrint, iWidth, hFont)
For Each sConf In aConf
Print sConf
Print
Next
End
Private Function RowsPrint(value As String, iWidth As Integer, hFont As Font) As String[]
Dim i As Integer
Dim ss As String[]
Dim rr As New String[]
Dim sRow As String
' Se la scrtta è più corta della console restituisce tutta la scritta
If hFont.TextWidth(value) < iWidth Then
rr.Push(value)
Return rr
Endif
' Divide la scritta per parole e aggiungendole a sRow una alla volta e controlla la lunghezza.
' Se la scritta è più lunga, toglie l'ultima parola e la passa come nuova riga a un vettore.
' sRow riparte dalla parola tolta alla riga.
ss = Split(value, " ")
For Each s As String In ss
sRow &= s & " "
If hFont.TextWidth(sRow) > iWidth Then
sRow = RTrim(Replace(sRow, s, ""))
rr.Push(sRow)
sRow = s & " "
Endif
Next
Return rr
End
Per coloro che leggono la prima volta questa discussione:L'IDE salva i suoi dati in Settings, ho pensato che andando a leggere le misure salvate li si potesse ottenere la larghezza della console
Ho posto una domanda nella MailingList ufficiale di Gambas per sapere quale sia (...se vi è) nella console dell'IDE di Gambas (utilizzabile in particolare quando si redigono i codici dei nostri progetti) il numero massimo di caratteri stampabili senza che il testo, ivi stampato, continui automaticamente alla riga successiva in basso.
Per Gianluigi:
1) Puoi spiegare il ragionamento di quanto hai scritto ?
2) provando il tuo codice viene sollevato l'errore " Identificatore sconosciuto: Font " nel terzo parametro della funzione "RowsPrint()". Devi tenere conto che la mia domanda è riferita sempllicemente a un'applicazione a riga di comando ! Chi vuole testare il codice di Gianluigi con un'applicazione non-grafica dovrà attivare il Componente gb.gui.qt.
'sFont = UnQuote(Scan(aConf[i], "*=*")[1])
' IN
sFont = Scan(aConf[i], "*\"*")[1]
3) Ad ogni modo, provando il codice, mi restituisce il numero esorbitante di 1198; laddove, invece, il numero massimo nella mia console di caratteri contenibili tale, che essi non vadano ad occupare anche la riga successiva sottostante, è 147 (numero verificato empiricamente !).147 :o stiamo parlando di pixel non di caratteri cosa usi un cellulare ;D
147 stiamo parlando di pixel non di caratteri
Print String(147, "=")
P.S. Ha risposto ora Benoit Minisini e pare basti leggere la proprietà File.Out.Term.WidthBene.
Ad ogni modo ho verificato che relativamente al contenuto del file " .../.config/gambas3/gambas3.conf ", il valore espresso nel secondo elemento dell'array " panProject " (a me è: panProject=[False,168,True], rappresenta in pixel la larghezza minima predefinita del riquadro sinistro dell'IDE (che può essere disattivato e riattivato premendo F10 oppure cliccando susottomenu "Visualizza-->Progetto").
' Gambas module file
Public Sub Main()
' [FMain]
' Geometry=[0,0,1854,1017,0]
' panProject=[False,297,True]
' panProperty=[False,357,True]
' panDebug=[False,112,True]
' FixedFont="Monospace,10"
Dim sConf As String
Dim aConf As String[]
Dim i As Integer
If Exist("~/.config/gambas3/gambas3.conf") Then
'' Nota: Se avete variato l'ide occorre chiudere e riaprire il progetto
sConf = File.Load("~/.config/gambas3/gambas3.conf")
If sConf Then
aConf = Split(sConf, "\n", Null, True)
i = aConf.Find("[FMain]")
If i <> -1 Then
Print "La larghezza della ide è: "; Space(24); Val(Scan(aConf[i + 1], "*,*,*,*,*")[2])
Print "La finestra debug è fluttuante = "; Space(17); Scan(aConf[i + 4], "*[[]*,*")[1]
Print "Il progetto è nascosto = "; Space(25); Scan(aConf[i + 2], "*[[]*,*")[1]
Print "La laghezza del pannello progetto è "; Space(14); Val(Scan(aConf[i + 2], "*[[]*,*,*")[2])
Endif
i = aConf.Find("FixedFont*", gb.Like)
If i <> -1 Then
'sFont = UnQuote(Scan(aConf[i], "*=*")[1])
Print "Il font della console è : "; Space(24); Scan(aConf[i], "*\"*\"")[1]
Endif
Endif
Endif
End
No non è così, purtroppo il progetto aperto non registra i cambiamenti nel config di gambas3, per leggere i cambiamenti apportati occorre, dopo aver apportato i cambiamenti, chiudere e riaprire il progetto per poter leggere i nuovi dati.Sì, dunque quel numero non è predefinito: cambiando la dimensione del pannello del progetto (panProject) e chiudendo il progetto medesimo, poi riaprendolo troveremo il valore del secondo elemento dell'array modificato secondo l'ultima dimensione impostata di quel pannello.
Write String(CInt(Fix(Screen.Width / 8.13)), "A")
Una cosa particolare che ho notato è la seguente.
A me la dimensione orizzontale minima del pannello-progetto (panProject) è pari a 168 pixel (come da secondo valore dell'array panProject nel file gambas3.conf); così come il numero massimo di caratteri stampabili nella Console alla sua massima dimensione orizzontale 1366 pixel), senza che automaticamente prosegua nella riga successiva, è pari a 168.