Referenziare in modo appropriato lo spazio all'interno di un Contenitore rispetto ai suoi Oggetti figli

Da Gambas-it.org - Wikipedia.

Lo spazio all'interno di un contenitore deve essere referenziato tramite le Proprietà ".ClientHeight" e ".ClientWidth" del Contenitore.
Le Proprietà ".W" e ".H" si riferiscono invece all'intero Contenitore, inclusi margini, header e quant'altro. Quindi fare riferimento a queste due ultime Proprietà può portare a calcoli errati.

L'area utile è identificabile tramite le Proprietà ".ClientWidth" e ".ClientHeight".
Tramite queste Proprietà ci si può spostare senza problemi nella zona assegnata agli Oggetti "figli" del Contenitore.
Stessa cosa avviene per il posizionamento del margine Top/Left, che deve corrispondere come limite alle Proprietà ".ClientX" e ".ClientY" pur essendo comunque che queste sono sempre 0,0 e quindi non si hanno problemi.

Nel caso specifico di una ScrollBox, la questione è più accentuata a causa degli Oggetti che sono già presenti nel Contenitore (es. le ScrollBar laterali e in basso), e tenendo anche presente che l'area utile è più grande di quella visibile.
In effetti ci sono due aree identificabili: l'area visibile e l'area di scroll (mediamente più grande). Le proprietà di individuazione sono perciò diverse.
Per l'area visibile si utilizzano le Proprietà .ScrollX/.ScrollY/.ScrollH/.ScrollW, che hanno origine non più da zero, ma dalla posizione della zona all'interno dell'area totale. Invece per l'area totale si utilizzano le classiche Proprietà ".ClientX/.ClientY/.ClientH/.ClientW".


Note

  • Per un esempio pratico vedere la seguente pagina:

Fissare la distanza di un oggetto in modo costante rispetto ai bordi del Form durante il suo ridimensionamento