Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: Marmar - 29 Agosto 2011, 22:48:59

Titolo: Adeguare larghezza pannelli al numero di pannelli visibili
Inserito da: Marmar - 29 Agosto 2011, 22:48:59
ciao a tutti... spero siano ite bene le vacanze!  ;D
vengo subito al dunque: ho un form con dentro 4 contenitori che vengono attivati o disattivati (giocando sulla proprietà Visible) a seconda dei pulsanti del menù. C'è un modo per far adeguare la larghezza dei pannelli a seconda di quanti sono visibili? Mi spiego: se ci sono solo due pannelli con Visible = TRUE allora ognuno occuperà il 50% della larghezza totale, se ce ne sono tutti e 4 allora ognuno occuperà il 25 %. Ho provato a giocare con le proprietà autoresize, arrange e expand, ma ottengo solo che o l'ultimo pannello si espande al massimo e gli altri rimangono così come li inserisco oppure il primo copre tutti gli altri.
Dico subito e una parziale soluzione l'avrei: far calcolare le dimensioni di tutti i contenitori ogni volta che uno di loro diventa visibile, ma significa creare tantissimi if... else if...!

P.S. ho provato a cercare nel forum ma non ho trovato nulla a riguardo, ma ovviamente se mi è sfuggita qualche discussione precedente chiedo venia!

Mercì
Titolo: Re: Adeguare larghezza pannelli al numero di pannelli visibili
Inserito da: milio - 29 Agosto 2011, 23:53:04
Esempio...  ;)
Titolo: Re: Adeguare larghezza pannelli al numero di pannelli visibili
Inserito da: Marmar - 30 Agosto 2011, 11:01:07
posto un esempio con 3 contenitori invece che 4:

Codice: [Seleziona]
IF contenitor1.Visible = FALSE THEN
  contenitor1.Visible = TRUE

  IF contenitor2.Visible = TRUE AND contenitor3.Visible = TRUE THEN
    contenitor1.Width = form.Width / 3
    contenitor2.Width = contenitor1.Width
    contenitor3.Width = contenitor1.Width
  ELSE IF contenitor2.Visible = TRUE AND contenitor3.Visible = FALSE THEN
    contenitor1.Width = form.Width / 2
    contenitor2.Width = contenitor1.Width
  ELSE IF contenitor3.Visible = TRUE AND contenitor2.Visible = FALSE THEN
    contenitor1.Width = form.Width / 2
    contenitor3.Width = contenitor1.Width
  ELSE IF contenitor2.Visible = FALSE AND contenitor3.Visible = FALSE THEN
    contenitor1.Width = form.Width
  ENDIF

ELSE IF contenitor1.Visible = TRUE THEN
  contenitor1.Visible = FALSE

  IF contenitor2.Visible = TRUE AND contenitor3.Visible = TRUE THEN
    contenitor2.Width = form.Width / 2
    contenitor3.Width = contenitor3.Width
  ELSE IF contenitor2.Visible = TRUE AND contenitor3.Visible = FALSE THEN
    contenitor2.Width = form.Width
  ELSE IF contenitor3.Visible = TRUE AND contenitor2.Visible = FALSE THEN
    contenitor3.Width = form.Width
  ENDIF

ENDIF

non so se ho fatto qualche errore di sintassi, ma è più importante la logica del sistema. Sto cercando un modo per semplificare un codice del genere, poichè se devo applicare un sistema del genere a 5 o 6 contenitori il codice diventerà terribilmente più lungo... Come detto ho provato a giocare con le proprietà expand e autoresize, ma non le so bene usare, quindi magari avevo anche la soluzione a portata di mano...  :-[
Titolo: Re: Adeguare larghezza pannelli al numero di pannelli visibili
Inserito da: md9327 - 30 Agosto 2011, 14:02:52
Come già da me scritto in altra discussione recente, puoi usare i container VBox e HBox, e agire sulle proprietà di Expand e Autoresize degli oggetti.

Di norma, quando un oggetto è contenuto in un contenitore che ha la proprietà di gestire automaticamente il dimensionamento dei suo figli, deve gestire anche la cosa in sistuazioni di visibilità, o meno.