2013-11-14 11 views
6

Ho un VST con 3 colonne che occupano uniformemente lo spazio disponibile.Le colonne VirtualStringTree devono adottare le dimensioni quando una colonna è nascosta

(ho impostato hoAutoSpring in Header.Options e tutte le colonne hanno Colonna [x] .OPtion hanno fissato coAutoSpring.)

Ora voglio essere in grado di nascondere l'ultima colonna e sostengono che le altre colonne prendi lo spazio libero in modo uniforme (un po 'come un controllo con alClient).

Quando ho impostato solo la colonna invisibile (vedi sotto) lo spazio che è stato preso dalla colonna è quindi semplicemente inutilizzato.

VST.Header.Columns[2].Options:=VST.Header.Columns[2].Options - [coVisible]; 

Quando ho creato Header.Options.hoAutoResize a Header.AutoSizeIndex Vero e impostato a 1, quindi il 2 ° Colonna prenderà tutto il nuovo spazio.

C'è un metodo per dire alle colonne di riempire lo spazio disponibile e ridimensionare uniformemente?

Screenshot:

enter image description here

+3

+1 solo per l'immagine. Ottima prima domanda. Benvenuto in SO! – jpfollenius

+0

Si scopre che 'AutoFitColumns' con' smaAllColumns' non mostra il comportamento che mi aspettavo. Ho cancellato la mia risposta. – jpfollenius

+0

@jpfollenius: Grazie! Sono sorpreso positivamente di quanto velocemente ho trovato risposte di alta qualità qui. Penso che starò qui per un po ':) – ralfiii

risposta

0

Grazie a tutti per le vostre risposte molto rapide e di qualità!

come sembra che non c'è è costruito in modo da risolvere il mio problema che ho codificato che modo seguente (nel caso in cui qualcuno si imbatte in un problema simile):

// Show/hide a column and spread the space on all other visible columns 
// so that the proportions remain the same (as if AutoSpring was used) 
procedure ChangeColumnVisibility(Tree: TVirtualStringTree; Column: TColumnIndex; 
    NewVisible: boolean); 
var Col : TVirtualTreeColumn; 
begin 
    Col:=Tree.Header.Columns[Column]; 
    if not (NewVisible xor (coVisible in Col.Options)) then 
     Exit; 

    if not NewVisible then 
    begin 
      Col.Options:=Col.Options - [coVisible]; 
      Tree.Header.ResizeColumns(Col.Width, 0, Tree.Header.Columns.Count-1); 
    end 
    else 
    begin 
      Tree.Header.ResizeColumns(-Col.Width, 0, Tree.Header.Columns.Count-1); 
      Col.Options:=Col.Options + [coVisible]; 
    end; 
end; 


procedure TForm1.Button1Click(Sender: TObject); 
begin 
    ChangeColumnVisibility(VST, 2, not (coVisible in VST.Header.Columns[2].Options)); 
end; 
+0

Hai provato a mostrare la stessa colonna che nascondi in questo modo? Impostando manualmente la larghezza della colonna "filler" si mantiene per quella colonna di autosize solo un piccolo spazio se lo si mostra di nuovo. – TLama

+0

Hai ragione. Header.Options.hoAutoResize deve essere falso affinché funzioni correttamente. (Ho impostato Header.options.hoAutoSpring e ho impostato coAutoSpring per tutte le colonne nella mia app) – ralfiii

+0

appena inciampato su Tree.Header.ResizeColumns che ha reso il codice molto più chiaro - ha modificato il codice nel mio post sopra. – ralfiii