Visual Basic Simple
FBI Splitter & Sizer
Separatore automatico per un gruppo di controlli
Sincronizza Indice
Sincronizza Indice
Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Testo dell'articolo
Stampa l'articolo
Stampa l'articolo

Difficoltà: 4 / 5

Figura 1
Figura 1
Figura 2
Figura 2
Figura 3
Figura 3

Il controllo FBI Splitter & Sizer è stato progettato per consentire la gestione di un separatore tra due o più controlli, in modo da concedere all'utente la possibilità di trascinare il separatore e ridimensionare o spostare automaticamente tutti i controlli assegnati.

Tale genere di controllo è spesso necessario quando si desidera permettere il ridimensionamento del Form e la disposizione dei vari controlli, in modo da riflettere la nuova dimensione ed ampliare o ridurre l'area di lavoro.

Il funzionamento generale è mostrato nelle tre figure a fianco: al controllo FBI Splitter & Sizer sono stati assegnati due controlli: una ListBox sul lato sinistro ed una Label posta sul lato destro.

Nel momento in cui il puntatore del mouse si posa sopra il separatore (che solitamente è invisibile), cambia la sua forma, ad indicare che ne è possibile il trascinamento, come mostrato nella Figura 1.

Sarà quindi possibile afferrare il separatore e trascinarlo su un asse, come mostrato nella Figura 2. Durante il trascinamento il separatore diventa visibile, per consentire un migliore orientamento durante l'operazione.

Al termine del trascinamento tutti i controlli assegnati sono automaticamente adattati alla nuova dimensione, come mostrato nella Figura 3, la ListBox è ingrandita, mentre la larghezza della Label è ridotta.

Il controllo può esser posto sia orizzontalmente che verticalmente e la sua grandezza è libera. È anche possibile determinare il comportamento dei controlli al termine del trascinamento, cioè se essi devono adattarsi al nuovo spazio oppure devono semplicemente spostarsi senza alterare la dimensione.

Sono inoltre consentite due modalità di gestione: una semplice, limitata al ridimensionamento e allo spostamento automatico, ed una più complessa, in grado di ridisporre i controlli automaticamente al ridimensionamento del form. Vedi note (3).


Proprietà

Utilizzabile in fase di progettazione Utilizzabile in fase di progettazione
Accessibile in lettura in fase di esecuzione Accessibile in lettura in fase di esecuzione
Accessibile in scrittura in fase di esecuzione Accessibile in scrittura in fase di esecuzione
  • BackColor As OLE_COLOR Utilizzabile in fase di progettazioneAccessibile in lettura in fase di esecuzioneAccessibile in scrittura in fase di esecuzione
    Restituisce o imposta il colore di sfondo utilizzato per la visualizzazione di testo e grafica in un oggetto.

  • Direction As EnumDirection Utilizzabile in fase di progettazioneAccessibile in lettura in fase di esecuzioneAccessibile in scrittura in fase di esecuzione
    Restituisce o imposta la direzione durante l'operazione di trascinamento.
    La proprietà indica lo spostamento possibile durante il trascinamento ed è quindi invertita rispetto la posizione del separatore. Vedi note (2).

  • DragColor As OLE_COLOR Utilizzabile in fase di progettazioneAccessibile in lettura in fase di esecuzioneAccessibile in scrittura in fase di esecuzione
    Restituisce o imposta il colore di sfondo utilizzato durante l'operazione di trascinamento.

  • FormSizeCheck As Boolean Utilizzabile in fase di progettazioneAccessibile in lettura in fase di esecuzioneAccessibile in scrittura in fase di esecuzione
    Restituisce o imposta un valore che determina se il controllo deve verificare anche il ridimensionamento del form.

    Determina se il controllo deve sfruttare la modalità semplice (False) oppure quella avanzata (True) con la gestione della dimensione del form. Vedi note (3).

  • Max As Single Utilizzabile in fase di progettazioneAccessibile in lettura in fase di esecuzioneAccessibile in scrittura in fase di esecuzione
    Restituisce o imposta il punto massimo verso cui può essere trascinato il controllo. Dipende dalla proprietà Direction.

  • Min As Single Utilizzabile in fase di progettazioneAccessibile in lettura in fase di esecuzioneAccessibile in scrittura in fase di esecuzione
    Restituisce o imposta il punto minimo verso cui può essere trascinato il controllo. Dipende dalla proprietà Direction.

  • WastedHeight As Single Utilizzabile in fase di progettazioneAccessibile in lettura in fase di esecuzioneAccessibile in scrittura in fase di esecuzione
    Restituisce o imposta un valore che indica lo spazio occupato nella parte inferiore, al fine di effettuare la corretta gestione del ridimensionamento.
    Utilizzata per preservare una parte dell'altezza nella ridisposizione dei controlli quando la proprietà FormSizeCheck è impostata su True. Vedi note (4).

  • WastedWidth As Single Utilizzabile in fase di progettazioneAccessibile in lettura in fase di esecuzioneAccessibile in scrittura in fase di esecuzione
    Restituisce o imposta un valore che indica lo spazio occupato nella parte destra, al fine di effettuare la corretta gestione del ridimensionamento.

    Utilizzata per preservare una parte della larghezza nella ridisposizione dei controlli quando la proprietà FormSizeCheck è impostata su True. Vedi note (4).

Metodi

  • AboutBox
    Tipo di metodo: Sub
    Parametri richiesti: (nessuno)
    Definizione: Sub AboutBox()
    Mostra le informazioni di copyright del controllo.

  • AddObject
    Tipo di metodo: Function
    Parametri richiesti: ByRef newControl As Control
    Position As EnumPosition
    Action As EnumSplitterAction
    Aligned As EnumAligned
    Distance As Single
    MinSize As Single
    Definizione: Function AddObject(ByRef newControl As Control, ByVal Position As EnumPosition, ByVal Action As EnumSplitterAction, ByVal Aligned As EnumAligned, ByVal Distance As Single, ByVal MinSize As Single) As Integer
    Aggiunge un nuovo controllo che verrà gestito dal controllo nelle operazioni di trascinamento e di ridimensionamento del form.
    Aggiunge un controllo all'elenco dei controlli assegnati e ne restituisce l'indice all'interno dell'insieme. Gli argomenti consentono di specificare il rapporto del controllo rispetto il separatore, in termini di posizione, azione, allineamento, distanza e grandezza minima.

  • ClearObjects
    Tipo di metodo: Sub
    Parametri richiesti: (nessuno)
    Definizione: Sub ClearObjects()
    Elimina tutti gli oggetti assegnati al controllo.

  • Rearrange
    Tipo di metodo: Sub
    Parametri richiesti: (nessuno)
    Definizione: Sub Rearrange()
    Dispone i controlli associati nelle loro posizioni.

Eventi

  • Error
    Parametri richiesti: ByRef objControl As Control
    Size As Single
    Definizione: Event Error(ByRef objControl As Control, ByVal Size As Single)
    Viene generato quando si verifica un errore nella ridisposizione dei controlli.

  • Changed
    Parametri richiesti: (nessuno)
    Definizione: Event Changed()
    Viene generato al termine dell'operazione di ridisposizione delle icone.

  • SplitterOverForm
    Parametri richiesti: (nessuno)
    Definizione: Event BlaBla()
    Viene generato quando il form si ridimensiona in modo da coprire tutto o parte dello splitter.

Note

All'interno del controllo utente sono dichiarate alcune Enumerazioni utilizzate dalle proprietà e dai metodi:

Enum EnumDirection
    vbHorizontal = 1
    vbVertical = 2
End Enum

Utilizzata dalla proprietà Direction per indicare l'asse sul quale può essere trascinato il separatore. Vedi Note (2). I valori corrispondono a quelli dell'enumerazione ScrollBarConstants.

Enum EnumPosition
    PositionTopLeft = 0
    PositionBottomRight = 1
End Enum

Utilizzata dal metodo AddObject ed in alcune strutture interne, per indicare la posizione del controllo rispetto al separatore: Superiore o Inferiore quando la proprietà Direction è vbVertical oppure Sinistra o Destra quando la proprietà Direction è vbHorizontal.

Enum EnumSplitterAction
    SplitterActionMove = 0
    SplitterActionResize = 1
End Enum

Utilizzata dal metodo AddObject, determina il comportamento del controllo assegnato rispetto al separatore, ovvero se esso debba essere spostato o ridimensionato.

Enum EnumAligned
    AlignedToSplitter = 1
    AlignedToBottom = 2
    AlignedToRight = 4
End Enum

Anche questa è utilizzata dal metodo AddObject, in particolare in combinazione con la proprietà FormSizeCheck, quando questa è impostata su True. Il valore 1 - AlignedToSplitter determina la posizione del controllo, allineata al separatore; il valore 2 - AlignedToBottom determina l'allineamento in fondo al form; infine il valore 3 - AlignedToRight determina l'allineamento sulla destra del form quando questo viene ridimensionato. Il valore AlignedToSplitter può anche essere combinato con gli altri due valori.

Figura 4La proprietà Direction consente di specificare l'asse sul quale il separatore può essere trascinato e corrisponde all'asse opposto a quello grafico. Ad esempio nella figura a fianco il separatore rosso, posto verticalmente, utilizza la proprietà Direction impostata su vbHorizontal in quanto il solo trascinamento possibile è quello orizzontale, a destra o a sinistra. Viceversa il separatore Azzurro utilizza il valore vbVertical, in modo da consentire il trascinamento sul solo asse verticale.

La proprietà determina anche il comportamento del valore dell'enumerazione EnumPosition specificato nell'argomento Position del metodo AddObject. Quando Direction utilizza il valore vbVertical, l'argomento Position indica la posizione superiore o inferiore, mentre quando Direction è uguale a vbHorizontal, l'argomento Position riceve i valori sinistra o destra.

La proprietà FormSizeCheck specifica se utilizzare la gestione automatica nel ridimensionamento del form. Durante questa fase tutti i controlli associati che presentano i valori AlignedToBottom o AlignedToRight vengono riposizionati ai rispettivi margini inferiore o destro.

Ad esempio guardando la figura precedente possiamo notare che la casella di testo in basso è allineata contemporaneamente al bordo destro ed a quello inferiore. Al ridimensionamento del form essa sarà automaticamente riposizionata (mediante spostamento o ridimensionamento) per stare sempre a contatto dei due margini.

Inoltre il controllo separatore azzurro è associato a quello rosso ed allineato al margine destro. Viceversa il controllo rosso è associato a quello azzurro ed allineato al margine inferiore, ed entrambi utilizzano il valore SplitterActionResize per ingrandirsi o ridursi in funzione dell'ampiezza della superficie del form.

Quando il form si stringe tanto da superare la distanza minima tra bordo e separatore, il controllo è automaticamente spostato a sinistra o verso l'alto per ridisporre i controlli assegnati automaticamente. Si tratta a volte di un comportamento non desiderato e quindi liberamente disattivabile durante la fase di esecuzione. La modalità di gestione avanzata è ancora lontana dalla perfezione, ma avrebbe richiesto tantissime complicazioni per una corretta gestione.

Le proprietà WastedHeight e WastedWidth sono state studiate per riservare una parte dello spazio nei due bordi destro ed inferiore. Si rivela utile per lasciare gli oggetti allineati verso un bordo, senza andare a sovrapporli ad altri oggetti preesistenti, allineati mediante la loro proprietà Alignment.

Fibia FBI
30 Gennaio 2003

Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Scarica il testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Torna all'indice dei Controlli utente