2017-04-25 46 views
2

我试图让VST在其高度和宽度改变时自动调整大小。 我没有与其他放置VCL组件的问题,其中一些有像TImage一样的属性“拉伸”,它可以让它们自动调整。 VST保持固定并保持节点高度和列宽度。TVirtualStringTree ScaleBy Stretch

  • 我看过Header-> hoAutoResize,hoColumnResize。在这个问题上,AutoSizeIndex <> -1不是很有用,因为我需要每列都缩小。我想这就是为什么这些什么都不做。 将AutoSizeIndex更改为我的最后一列(3,因为我有4列)并且hoAutoResize = True;仍然不会影响我的列宽度。 hoColumnResize是让用户调整列大小的设置,所以没有运气,
  • 我看到TreeOptions-> AutoOptions-> toAutoChangeScale和toAutoSpanColumns。 我发现在我的情况下,自动弹跳列的反作用,所以这是关闭。我的字体大小正在调整。
  • 我找到了Tree.Scaleby,但我无法让它对我有利,它在我的官方.pdf文档中没有记录。
  • 所有4列有10 minWidth,所以没有问题,有
  • 所有4已coEnabled,coVisible,coResizable:= True和coFixed,coSmartResize:=假FWIW

我想我只是打错误的设置组合或其他东西。 任何提示都会很棒,谢谢。

+1

可能重复的[Automated sizing column in TVirtualStringTree](http://stackoverflow.com/questions/2679862/auto-sizing-column-in-tvirtualstringtree) – Kiogara

+0

自动调整列宽应该可以工作。 Auto-Sizing node-/line-height看起来像一个相当不寻常的概念:像Windows资源管理器或Outlook这样的控件(如Grids和TListView)和应用程序不会这样做。 –

+0

我只是认为在VST有大量的选项中,会有一些功能类似于“拉伸”的东西,只是列宽。事实证明,你必须在OnResize中手动完成... – hzzmj

回答

1

从你的文章,我知道你是想自动调整所有列比例时TVirtualStringTree宽度变化的宽度。如果你希望这也发生在行高,你可以相应地应用以下内容。

没有设定为一个propertional列的宽度,但它是简单的OnResize事件TVirtualStringTree来实现:

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%的组件宽度。

+0

这很好,谢谢。 ANode:PVirtualNode;而分配(Anode)开始VST.NodeHeight [ANode]:= trunc(VST.Height/16); ANode:= VST.GetNextVisible(ANode);结束; – hzzmj

0

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

事情是这样的,如果你想以编程方式做到这一点:

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

我编辑了我的文章。我已阅读您发布之前链接的帖子。我不明白它的工作 – hzzmj