要避免什么?
如果要更改节点的大小,请不要修改ContentRect
in 。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
声明的参数指定节点宽度。