Sempre più difficile!
In una casella di
GridView devo impegnare tutta la l'ampiezza della casella scrivendo il valore di una variabile all'estrema sinistra e quello di un'altra, sempre nella stessa casella, ma all'estrema destra.
Riprendendo, questa discussione, perchè la funzione
Alignment di Gambas non è è applicabile, ho utilizzato la funzione di allineamento
"fatta in casa" mediante le seguenti istruzioni:
AllineaCelleGrid = New AllinCelleGriBox(GriTabMovv, iTotRgGri, 2, $NomeVoce, "sx")
iLun = Len($NomeVoce)
iLun1 = Len(GriTabMovv[iTotRgGri, 2].Text)
$StriMia = "Totali pregressi a riporto => SALDO: " & $Valuta & " " & EdtImp.$Imp! iLun2 = Len($StriMia)
iDiff = iLun1 - (iLun + iLun2)
If iDiff > 0 Then
$StriMia = $NomeVoce & Space(iDiff) & $StriMia
AllineaCelleGrid = New AllinCelleGriBox(GriTabMovv, iTotRgGri, 2, $StriMia, "dx")
Else
AllineaCelleGrid = New AllinCelleGriBox(GriTabMovv, iTotRgGri, 2, $NomeVoce & " /// " & $StriMia, "dx")
Endif
Per completezza riporto la classe
"AllinCelleGRiBox":
' Gambas class file
'------------------------------- AllinCelleGriBox.Class ------------------------------------------------------------------------------------------
' Questa Classe dinamica si occupa dell'allineamento del contenuito di una cella interna ad una GridBox: -----------------------------------------
' cx --> codice identificativo della richiesta di un allineamento centrale rispetto alla cella --------------------------------------------------
' dx --> codice identificativo della richiesta di un allineamento laterale destro rispetto alla cella -------------------------------------------
' ct --> codice identificativo della richiesta di un allineamento centrale della testata della GridBox --------------------------------------------------
'-------------------------------------------------------------------------------------------------------------------------------------------------
Private iLunCasel As Integer
Private iLunSpazio As Integer
Private iLunTesto As Integer
Private i_Risult As Integer
Public Sub _new(hObject As GridView, i_NumRg As Integer, i_NumCol As Integer, $_Testo As String, $_TipAllin As String) 'Funzione di allineamento destrorso del testo
'-------------------------------------------------------
' [GB2:FNTW] i_LunSpazio = hObject.Font.Width(" ")
iLunSpazio = hObject.Font.TextWidth(" ")
' [GB2:FNTW] i_LunTesto = hObject.Font.Width($_Testo)
iLunTesto = hObject.Font.TextWidth($_Testo)
iLunCasel = hObject.Columns[i_NumCol].Width
i_Risult = (iLunCasel - iLunTesto) / iLunSpazio - 1
Select Case $_TipAllin
Case "sx"
AllinSx(hObject, i_NumRg, i_NumCol, $_Testo)
Case "dx"
AllinDx(hObject, i_NumRg, i_NumCol, $_Testo)
Case "cx"
AllinCen(hObject, i_NumRg, i_NumCol, $_Testo)
Case "ct"
CenTestata(hObject, i_NumCol, $_Testo)
Case "dt"
AllinDxTestata(hObject, i_NumCol, $_Testo)
End Select
End
Public Sub AllinDx(hObject As GridView, i_NumRg As Integer, i_NumCol As Integer, $_Testo As String) 'Funzione di allineamento destrorso del testo
'----------------------------------------------------------------
If i_Risult > 0 Then
hObject[i_NumRg, i_NumCol].text = String$(i_Risult, " ") & $_Testo
Else
hObject[i_NumRg, i_NumCol].text = $_Testo
Endif
End
Public Sub AllinCen(hObject As GridView, i_NumRg As Integer, i_NumCol As Integer, $_Testo As String) 'Funzione di allineamento centrale del testo
'----------------------------------------------------------------
If i_Risult > 0 Then
i_Risult /= 2
hObject[i_NumRg, i_NumCol].text = String$(i_Risult, " ") & $_Testo & String$(i_Risult, " ")
Else
hObject[i_NumRg, i_NumCol].text = $_Testo
Endif
End
Public Sub AllinSx(hObject As GridView, i_NumRg As Integer, i_NumCol As Integer, $_Testo As String) 'Funzione di allineamento destrorso del testo
'----------------------------------------------------------------
If i_Risult > 7 Then
hObject[i_NumRg, i_NumCol].text = $_Testo & String$(i_Risult, " ")
' hObject[i_NumRg, i_NumCol].text = $_Testo & String$(i_Risult - 7, " ")
Else
hObject[i_NumRg, i_NumCol].text = $_Testo
Endif
End
Public Sub AllinDxTestata(hObject As GridView, i_NumCol As Integer, $_Testo As String) 'Funzione di allineamento destrorso della testata di colonna
If i_Risult > 0 Then
hObject.Columns[i_NumCol].text = String$(i_Risult, " ") & $_Testo
Else
hObject.Columns[i_NumCol].text = $_Testo
Endif
End
Public Sub CenTestata(hObject As GridView, i_NumCol As Integer, $_Testo As String) 'Funzione di allineamento centrale della testata di colonna
'----------------------------------------------------------------------------------------------------------
If i_Risult > 0 Then
i_Risult /= 2
hObject.Columns[i_NumCol].text = String$(i_Risult, " ") & $_Testo & String$(i_Risult, " ")
Else
hObject.Columns[i_NumCol].text = $_Testo
Endif
End
La classe
"AllinCelleGRiBox" completa la lunghezza della stringa con tanti caratteri "spazio" quanti ne servono per impegnare tutta la casella. Essa viene richiamata due volte, la prima per riempire tutta la casella con la prima variabile, la seconda, dopo avere riunito entrambi le variabili, la prima a sx, la seconda a dx, della stringa di transito. La logica funziona solo teoricamente, perchè applicata praticamente, purtroppo, la stringa finale oltrepassa l'ampiezza della cella di GridView destinataria.
A prima vista ho la sensazione che il problema sia sulle dimensioni e sul tipo di font in base al quale lavora la classe
"AllinCelleGRiBox" che, credo, debba essere diverso da quello utilizzato poi per la casella di destinazione.
Se qualcuno non dovesse risolvere l'enigma prima di me, vi saprò dire.