8

我有一个带有 3 列的 VST,它们均匀地占用了可用空间。

  • 我已经hoAutoSpringHeader.Options中设置了,并且
  • 所有列都有Column[x].OptioncoAutoSpring设置。

现在我希望能够隐藏最后一列并保持其他列均匀占用可用空间(有点像带有 的控件alClient)。

当我只将列设置为不可见(见下文)时,该列占用的空间就根本未被使用。

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

当我将Header.Options.hoAutoResize设置为True并将Header.AutoSizeIndex设置为 时1,第二列将占用所有新空间。

有没有办法告诉列填充可用空间并均匀调整大小?

截屏:

在此处输入图像描述

4

1 回答 1

1

感谢大家非常快速和高质量的回复!

似乎没有内置的方法可以解决我的问题,我已经按照以下方式编写了代码(以防万一有人遇到类似问题):

// 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;
于 2013-11-14T15:20:17.617 回答