TVirtualStringTree ScaleBy Stretch
TVirtualStringTree ScaleBy Stretch
我正在尝试让 VST 在其高度和宽度更改时自动调整大小。
我用其他放置的 VCL 组件没有这个问题,其中一些像 TImage 一样有 属性 "Stretch",可以让它们自动调整。 VST 仍然顽固并保持 nodeHeights 和 Column 宽度。
- 我看到了Header->hoAutoResize, hoColumnResize。在这件事上,AutoSizeIndex <> -1 不是很有用,因为我需要缩小每一列。我认为这就是为什么这些没有做任何事情的原因。 将 AutoSizeIndex 更改为我的最后一列(3,因为我有 4 列)并设置 hoAutoResize = True;仍然不影响我的列宽。 hoColumnResize 是允许用户调整列大小的设置,所以也没有运气
- 我看到了 TreeOptions->AutoOptions->toAutoChangeScale 和 toAutoSpanColumns。 我发现 toAutoSpanColumns 在我的情况下会适得其反,所以关闭 。我的字体大小正在调整。
- 我找到了 Tree.Scaleby,但我无法让它对我有利,而且它在我拥有的官方 .pdf 文档中没有记录。
- 所有 4 列的最小宽度均为 10,所以没有问题
- 所有 4 个都有 coEnabled、coVisible、coResizable := True 和 coFixed、coSmartResize := False fwiw
我想我只是输入了错误的设置组合之类的。
任何提示都很好,谢谢。
除Header->hoAutoResize 为true 外,您还需要将Header->AutoSizeIndex 设置为您最后一列的索引。
如果您想以编程方式执行此操作,请执行以下操作:
vt.Header.Options := vt.Header.Options + [hoAutoResize];
vt.Header.AutoSizeIndex := vt.Header.Columns.GetLastVisibleColumn;
根据您的 post 我了解到您希望在 TVirtualStringTree
宽度变化时自动按比例调整所有列的宽度。如果您希望行高也发生这种情况,您可以相应地应用以下内容。
属性列宽没有设置,但在TVirtualStringTree
的OnResize
事件中很容易实现:
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%。
我正在尝试让 VST 在其高度和宽度更改时自动调整大小。 我用其他放置的 VCL 组件没有这个问题,其中一些像 TImage 一样有 属性 "Stretch",可以让它们自动调整。 VST 仍然顽固并保持 nodeHeights 和 Column 宽度。
- 我看到了Header->hoAutoResize, hoColumnResize。在这件事上,AutoSizeIndex <> -1 不是很有用,因为我需要缩小每一列。我认为这就是为什么这些没有做任何事情的原因。 将 AutoSizeIndex 更改为我的最后一列(3,因为我有 4 列)并设置 hoAutoResize = True;仍然不影响我的列宽。 hoColumnResize 是允许用户调整列大小的设置,所以也没有运气
- 我看到了 TreeOptions->AutoOptions->toAutoChangeScale 和 toAutoSpanColumns。 我发现 toAutoSpanColumns 在我的情况下会适得其反,所以关闭 。我的字体大小正在调整。
- 我找到了 Tree.Scaleby,但我无法让它对我有利,而且它在我拥有的官方 .pdf 文档中没有记录。
- 所有 4 列的最小宽度均为 10,所以没有问题
- 所有 4 个都有 coEnabled、coVisible、coResizable := True 和 coFixed、coSmartResize := False fwiw
我想我只是输入了错误的设置组合之类的。 任何提示都很好,谢谢。
除Header->hoAutoResize 为true 外,您还需要将Header->AutoSizeIndex 设置为您最后一列的索引。
如果您想以编程方式执行此操作,请执行以下操作:
vt.Header.Options := vt.Header.Options + [hoAutoResize];
vt.Header.AutoSizeIndex := vt.Header.Columns.GetLastVisibleColumn;
根据您的 post 我了解到您希望在 TVirtualStringTree
宽度变化时自动按比例调整所有列的宽度。如果您希望行高也发生这种情况,您可以相应地应用以下内容。
属性列宽没有设置,但在TVirtualStringTree
的OnResize
事件中很容易实现:
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%。