I have a VST with 3 columns that evenly take the available space.
hoAutoSpring
in Header.Options, andcoAutoSpring
set.Now I want to be able to hide the last column and maintain that the other columns evenly take the free space (a little bit like a control with alClient
).
When I only set the column invisible (see below) the space that was taken by the column is then simply unused.
VST.Header.Columns[2].Options:=VST.Header.Columns[2].Options - [coVisible];
When I set Header.Options.hoAutoResize to True and set Header.AutoSizeIndex to 1
, then the 2nd Column will take all the new space.
Is there a method to tell the columns to fill up the available space and resize evenly?
Screenshot:
Thanks to all for your very quick and high quality responses!
As it seems that there's no built in way to solve my problem i've coded that the following way (just in case somebody runs into a similar problem):
// 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;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With