要避免什么?
如果要更改节点的大小,请不要修改ContentRectin 。OnBeforeCellPaint事件中的ContentRect矩形OnBeforeCellPaint用于修改将渲染单元格的位置。它实际上并没有修改节点的大小。通过该ContentRect偏移量,您刚刚将绘画移出节点的物理位置,移出可以单击节点的位置。
如何调整节点高度?
默认的固定节点高度由DefaultNodeHeight属性定义。当你事先不知道你需要的节点高度时,你可以编写OnMeasureItem事件的处理程序。您可以在此处修改NodeHeight参数值以调整节点的高度。
当您要处理OnMeasureItem事件时,请确保将选项包含在toVariableNodeHeight选项TreeOptions.MiscOptions集中。
如何调整节点宽度?
具体控制,节点宽度是通过TVirtualStringTree测量节点文本宽度增加2*文本边距(可通过TextMargin属性调整)来计算的。在节点文本宽度测量期间,OnMeasureTextWidth会触发具有声明Extent参数的事件,该参数包含测量的文本宽度。通过修改此Extent参数,您将影响节点的整体宽度,因为此事件在内部仅用于此目的。
因此,要增加每个节点的宽度,例如增加 20 个像素,您可以编写以下代码:
procedure TForm1.VirtualStringTree1MeasureTextWidth(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
const Text: string; var Extent: Integer);
begin
Extent := Extent + 20;
end;
这是没有和修改文本范围的结果:

因为TVirtualDrawTree控制是容易得多的情况。它具有OnGetNodeWidth事件,用于通过其NodeWidth声明的参数指定节点宽度。