Fare girare lo stesso programma su SO. diversi, pur appartenenti allo stesso Universo Linux dovrebbe essere un vantaggio anche pubblicitario per un programma. Invece, per me, si sta dimostrando un vero e proprio dubbio amletico.
Dopo avere casualmente potuto allineare le versioni di Gambas su Ubuntu e su fedora alla 3.7.1, quando avvio il mio ContabFam, mi ritrovo la prima schermata dimensionata diversamente con ovvi fastidi estetici. Per farmi capire meglio ho allegato le due schermate. Mi ha preso la curiosità di guardare le dimensioni del desktop di Gambas nei due ambienti ed ecco i risultati:
Gambas-3.7.1(Ubuntu):
- Desktop.Width = '1301'
- Desktop.Height = '744'
Gambas-3.7.1(fedora):
- Desktop.Width = '1366'
- Desktop.Height = '7441
Premesso che il pc su cui ho avviato Ubuntu e fedora è sempre lo stesso, con lo stesso monitor, non capisco da che cosa possa dipendere tale differenza e non ho una precisa idea di come intervenire da programma per riallineare le non poche schermate nel mio programma.
Come risolvere tale problematica? :rolleyes:
L'unica soluzione che vedo in questo momento è quella di definire io una sorta di desktop tipo a cui ridimensionare tuitte le Form del programma, nella procedura_new di ciacuna FormX.class, come nel seguente esempio:
Public Sub _new()
Dim DeskWidthFrm as integer = 1300
Dim DeskHeightFrm as integer = 740
Me.Width = DeskWidthFrm - 100
Me.Height = DeskHeightFrm - 50
--- bla --- bla ---
Panel1.width = Me.Width - 700
Panel1.Height = Me.Width - 600
--- bla --- bla ---
End
A meno che non vi possano altre migliori e più semplici soluzioni.
:ciao:
Solo per una mia esclusiva curiosità personale: potresti farmi questo test e dirmi i risultati ?
Public Sub Form_Open()
Print Desktop.Width
Print Screen.Width
Print Screen.AvailableWidth
End
Ho rivisto il programma perché, a distanza di tanto tempo dalla scrittura della Form05, sotto accusa, avevo dimenticato alcuni particolari. Uno di essi è che la proprietà Autoresize della Form (Ide) è impostata a "TRUE". Un secondo dato molto importante è che il pannello che risulta sfalsato, all'interno della Form è dimensionato in larghezza a seconda delle necessità, all'interno di procedure richiamate nella "_new", quindi molto prima che accada l'efento Form_Resize.
A maggior chiarimento sul diverso dimensionamento del pannello "Tabelle interessate", allego un'immagine in cui si impiega una prorpietà width ancora più ampia di quella allegata nel post d'apertura.
Avevo pensato a giostrare il problema con un artifizio di questo tipo:
Public Sub Form_Resize()
Dim iDskTopW As Integer
Dim iScarto As Integer = 65
Dim iScrnW As Integer
Dim iScrValidW As Integer
Dim iWidth As Integer
Dim oObj As Object
'-------------------------------------------------------------------------------------------------------------
Print "Entrata in Form05.Form_Resize"
Print "Desktop.Width= '" & Desktop.Width & "'"
Print "Screen.Width= '" & Screen.Width & "'"
Print "Screen.AvailableWidth= '" & Screen.AvailableWidth & "'"
iDskTopW = Desktop.Width
iScrnW = Screen.Width
iScrValidW = Screen.AvailableWidth
If iDskTopW = iScrnW And iScrnW = iScrValidW Then
For Each oObj In Me.Children
iWidth = oObj.Width
' iHeight = oObj.Height
iWidth -= iScarto
Next
Endif
End
però la prova non ha funzionato. Noto ancora che lo sfalsamento è visibile solamente nel pannello "Tabelle interessate".
Avrei risolto così:
Private iScartW As Integer
Public Sub _new($TbParF5 As String[])
Dim iDskTopW As Integer
Dim i_NuTabVuote As Integer
Dim iScrnW As Integer
Dim iScrValidW As Integer
iDskTopW = Desktop.Width
iScrnW = Screen.Width
iScrValidW = Screen.AvailableWidth
If iDskTopW = iScrnW And iScrnW = iScrValidW Then
iScartW = 65
Endif
--- bla --- bla ---
End
Public Sub VerifTbDbDisord()
'-----------------------------------------------------------------------------------------------------------------------------------------------
--- bla --- bla ---
ResizePane1(464)
--- bla --- bla ---
End
Private Sub CarTbTotRec()
'-----------------------------------------------------------------------------------------------------------------------------------------------
--- bla --- bla ---
ResizePane1(592)
--- bla --- bla ---
Private Sub ResizePane1(iPanel1W As Integer)
'---------------------------------------------------
Me.Panel1.Width = iPanel1W - iScartW
End
Altre proposte?
:ciao: