Finalmente ho capito in parte!
Il mio codice non poteva funzionare in quanto assumeva che la finestra di messaggio si sarebbe allargata agendo sul messaggio stesso se questi fosse stato sufficientemente lungo.
Sono stato indotto all'errore con una prova non sufficientemente scientifica
. O più propriamente banalmente empirica (la scritta del messaggio con cui avevo fatto le prove era senza spazi, cosa che non succede nella realtà). Un normale messaggio viene suddiviso in più righe se supera una certa lunghezza, di conseguenza agire su di lui con degli spazi per allargare la finestra non ha senso.
Rimane per me comunque poco comprensibile del perché occorra forzare il codice con l'aggiunta al titolo di spazi aggiuntivi, se Gambas (o chi per esso) guarda solo al messaggio e lo divide in più righe come è possibile che allungando il titolo esso allarghi la finestra?
Se invece guarda al titolo (come si evince dal codice di vuott) com'è che se io scrivo un titolo lungo lo tronca?
Comunque per quanto detto all'inizio non dovrebbe andare bene misurare il titolo rispetto al messaggio per far intervenire una funzione di “allungo”. Se ho un messaggio lunghissimo esso supererà il titolo lungo e la funzione non interverrà.
Allora ho controllato empiricamente a che punto del messaggio scatta la divisione e sul mio Ubuntu essa interviene a > 410.
Allora ho provato questo codice che però ha un risultato “esuberante”.
Public Sub Form_Open()
Dim titolo As String = "Sono un titolo veramente ma veramente ma veramente ma veramente ma veramente lungo fine titolo"
Dim messaggio As String = "Questo è un messaggio."
Message.Title = mioTitolo(titolo)
'Message.Title = mioTitolo(UCase$(titolo))
Message.Info(messaggio)
End
Public Sub mioTitolo(titolo As String) As String
Dim i, a, b As Integer
i = Me.Font.TextWidth(titolo)
If i <= 410 Then
Return titolo
Else
a = Len(titolo)
b = i / a ' Larghezza media carattere
a = ((i - 410) \ b) ' Dovrei ottenere il numero di spazi necessari
Return titolo & Space$(a)
Endif
End
Se cambio invece
Else così:
a = Len(titolo)
a = a * 0.25
Return titolo & Space$(a)
sembrerebbe funzionare
Non riesco proprio a capire la logica.
Mi stavo dimenticando, naturalmente funziona anche col codice di
vuott