6

TVirtualStringTree から次のような結果を得ようとしています。

望ましい仮想ツリービューの外観

TVirtualStringTree(Mike Lischke によるメインの Virtual Treeview コントロール) を直接使用するか、それをサブクラス化して継承されたコントロールを変更するか、 TVirtualDrawTree.

これが私が得ることができるものであり、私が直面している問題を示しています:

実際の仮想ツリービューの外観

私が抱えている問題は、列 0 のテキストが仮想ツリービュー コントロールの水平領域全体を占めるように見えないことです。高度なデモには仮想ツリービュー デモがあり、複数行のテキストが表示され、必要なことを行っているように見えますが、ヘッダー行の下に必要な詳細列 (ノードとして表示) と組み合わせて適用する方法がわかりません。ノード、写真のノード)。

これが私が試したものです:

  • BeforeCellPaint イベントの ContentRect.Right を変更します。
  • で設定toGridExtensionsTreeOptions.MiscOptionsます。

contentRect を変更しようとした方法を示すコード サンプルを次に示します。

procedure TForm1.VirtualStringTree1BeforeCellPaint(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
var
   level:Integer;
begin
 level := VirtualStringTree1.GetNodeLevel(Node);
 if (level=0) then
    Inc( ContentRect.Right, 300);

end;

アップデート:

以下で受け入れられた回答を使用すると、次のようになります。

ここに画像の説明を入力

4

1 に答える 1

5

toAutoSpanColumnsオプション (in TreeOptions.AutoOptions) を、おそらくイベントと共に使用したいと思います(OnGetCellIsEmpty最初の列にのみテキストを返す場合は必要ありません)。

ivsMultiline複数行のノードを取得するには、(OnInitNode イベントで) 状態でそれらを初期化するか、設定しますvtree.MultiLine[Node] := boolean;

于 2011-08-29T16:31:50.100 に答える