Autore Topic: [Risolto] come gestire desktop di SO. diversi  (Letto 1060 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
[Risolto] come gestire desktop di SO. diversi
« il: 23 Giugno 2015, 10:47:34 »
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:
Citazione
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:
Codice: gambas [Seleziona]
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:
« Ultima modifica: 25 Giugno 2015, 15:06:22 da Picavbg »
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: come gestire desktop di SO. diversi
« Risposta #1 il: 23 Giugno 2015, 12:38:12 »
Dovresti usare l'evento:
Codice: gambas [Seleziona]
Public Sub Form_Resize()

all'interno della sua routine - poiché non hai inserito in contenitori dinamici (VPanel, etc) gli oggetti presenti nel Form - ridefinire proporzionalmente la dimensione e la posizione degli oggetti.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: come gestire desktop di SO. diversi
« Risposta #2 il: 23 Giugno 2015, 15:20:10 »
Non capisco cosa dovrebbe aggiustare l'evento Form_Resize, quando la dimensione della Form è ben definita fra le proprietà della Form, nellì'Ide di Gambas.
Successivamente al mio post d'apertura ho guardato anche la risoluzione del monitor fra le impostazioni di sistema e, sia nell'uno che nell'altro SO. incriminati, è la stessa, cioé 1366x768 (16/9).
Volendo ragionare con proprietà di profano penso che, essendo contemplata nelle impostazioni di sistema la stessa risoluzione, essendo impegato lo stesso linguaggio di programmazione con la stessa versione di aggiornamento, è più facile che esista una diversa impostazione di default nelle preferenze grafiche fra il Gambas-3.7.1 di Ubuntu rispetto alle corrispondenti del Gambas-3.7.1 di fedora.
Dico così perché ho riscontrato un default di Font diversi fra i due ambienti suddetti.

@ vuott:
per tornare alla tua riflessione, posso anche provare, ma secondo me non è risolutiva.
« Ultima modifica: 23 Giugno 2015, 15:25:14 da Picavbg »
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: come gestire desktop di SO. diversi
« Risposta #3 il: 23 Giugno 2015, 15:57:36 »
Solo per una mia esclusiva curiosità personale: potresti farmi questo test e dirmi i risultati ?

Codice: gambas [Seleziona]
Public Sub Form_Open()

  Print Desktop.Width
  Print Screen.Width
  Print Screen.AvailableWidth

End
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: come gestire desktop di SO. diversi
« Risposta #4 il: 23 Giugno 2015, 16:30:14 »
Solo per una mia esclusiva curiosità personale: potresti farmi questo test e dirmi i risultati ?

Codice: gambas [Seleziona]
Public Sub Form_Open()

  Print Desktop.Width
  Print Screen.Width
  Print Screen.AvailableWidth

End


 ???

con Ubuntu:
Citazione
Desktop.Width= '1301'
Screen.Width= '1366'
Screen.AvailableWidth= '1301'

con fedora:
Citazione
Desktop.Width= '1366'
Screen.Width= '1366'
Screen.AvailableWidth= '1366'
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: come gestire desktop di SO. diversi
« Risposta #5 il: 23 Giugno 2015, 16:49:31 »
Non capisco cosa dovrebbe aggiustare l'evento Form_Resize

Sembra  :-\ che hai uno sfalzamento fra i due sistemi di 65 pixel in larghezza. ...forse  :-\ bisogna assicurare le proporzioni degli oggetti e fra gli oggetti... la finestra sembrando forse  :-\ adattarsi al rettangolo di desktop effettivamente disponibile,
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: come gestire desktop di SO. diversi
« Risposta #6 il: 23 Giugno 2015, 22:10:29 »
Sembra  :-\ che hai uno sfalzamento fra i due sistemi di 65 pixel in larghezza. ...forse  :-\ bisogna assicurare le proporzioni degli oggetti e fra gli oggetti... la finestra sembrando forse  :-\ adattarsi al rettangolo di desktop effettivamente disponibile,
Si, è vero, ma come può essrci sfalsamento se la risoluzione è identica e l'hardware è lo stesso?

Considerando che in fedora risulta:
Citazione
Desktop.Width= Screen.Width= Screen.AvailableWidth= '1366'

mentre in Ubuntu risulta:
Citazione
Desktop.Width=  Screen.AvailableWidth= '1301'
Screen.Width= '1366'

Sembrerebbe che lo sfalsamento da correggere sia in Ubuntu, però in fedora 18 il programma mostrava le stesse ampiezze visive che si vedono in Ubuntu.

Più ci ragiono sopra e più  :rolleyes:
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: come gestire desktop di SO. diversi
« Risposta #7 il: 24 Giugno 2015, 10:13:54 »
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:
Codice: gambas [Seleziona]

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".
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: come gestire desktop di SO. diversi
« Risposta #8 il: 24 Giugno 2015, 13:03:15 »
Avrei risolto così:
Codice: gambas [Seleziona]

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:
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: come gestire desktop di SO. diversi
« Risposta #9 il: 24 Giugno 2015, 16:09:34 »
Purtroppo non è finita.   :o

C'è una stranezza sulla quale non mi ero soffermato prima.
Abbiamo riscontrato che
con Ubuntu:   Desktop.Width = '1301'
                     Screen.Width = '1366'
                     Screen.AvailableWidth = '1301'

 con fedora:   Desktop.Width = '1366'
                    Screen.Width = '1366'
                    Screen.AvailableWidth = '1366'

con una differenza di 65 pixel a favore di fedora. Lo ha dimostrato la maggiore ampiezza vista nel pannello "Tabelle interessate" di fedora.
Guardando bene le due schermate, si vede però chiaramente che la Form contenitore di fedora è meno ampia rispetto a quella di Ubuntu, invece che al contrario, come sarebbe stato logico aspettarsi. Quindi il divario fra le due realtà non è sempre costante.
A questo punto non so più come comportarmi, perché gestire un'ambiguità del genere diventa veramente difficile.  :rolleyes:  :rolleyes:   :hatecomputer:

P.S.: leggendo in giro ho appreso che Desktop.Width e Screen.AvailableWidth  sono l'identico dato, chiamato in maniera diversa.
« Ultima modifica: 24 Giugno 2015, 16:52:01 da Picavbg »
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: come gestire desktop di SO. diversi
« Risposta #10 il: 24 Giugno 2015, 18:04:11 »
Finalmeeeentee !!  ;D

Ho scoperto l'inghippo. Fra le proprietà della Form05, avevo posto nell'Ide la proprietà Scaled = TRUE. Ciò determinava un dimensionamento orizzontale della Form a 1200 pixel con Ubuntu, mentre rimaneva inalterato a 1050 pixel per fedora.
Visto che il comportamento più adatto alle mie necessità successive era quello di Ubuntu, ho dimensionato la proprietà Width a 1200 ed ho posto Scaled = FALSE Ora entrambi in entrambi i SO la Form05.Width è la stessa, cioè 1200 pixel.
A questo punto anche il pannello "Tabelle interessate" rimane inalterato e quindi si è presentato sporco in entrambi gli ambienti operativi. Modificando opportunamente la proprietà width del pannello, ho allineato tutto alle stesse dimensioni sia per l'uno che per l'altro dei SO.
Posso, a questo punto, togliere tutte le istruzioni correttive emerse durante la discussione.
Salvo, ulteriori cattive nuove  ;D
Grazie!
 :ciao:
:ciao: