何を避けるべきですか?
ノードのサイズを変更する場合はContentRect
、を変更しないでください。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