TVirtualStringTree ScaleBy Stretch

TVirtualStringTree ScaleBy Stretch

我正在尝试让 VST 在其高度和宽度更改时自动调整大小。 我用其他放置的 VCL 组件没有这个问题,其中一些像 TImage 一样有 属性 "Stretch",可以让它们自动调整。 VST 仍然顽固并保持 nodeHeights 和 Column 宽度。

我想我只是输入了错误的设置组合之类的。 任何提示都很好,谢谢。

除Header->hoAutoResize 为true 外,您还需要将Header->AutoSizeIndex 设置为您最后一列的索引。

如果您想以编程方式执行此操作,请执行以下操作:

vt.Header.Options := vt.Header.Options + [hoAutoResize];
vt.Header.AutoSizeIndex := vt.Header.Columns.GetLastVisibleColumn;

根据您的 post 我了解到您希望在 TVirtualStringTree 宽度变化时自动按比例调整所有列的宽度。如果您希望行高也发生这种情况,您可以相应地应用以下内容。

属性列宽没有设置,但在TVirtualStringTreeOnResize事件中很容易实现:

procedure TForm1.VSTResize(Sender: TObject);
begin
  VST.Header.Columns[0].Width := MulDiv(VST.Width, 50, 100);
  VST.Header.Columns[1].Width := MulDiv(VST.Width, 30, 100);
  VST.Header.Columns[2].Width := MulDiv(VST.Width, 20, 100);
end;

在上面,列保持为组件宽度的 50%、30% 和 20%。