2011-08-29 5 views
6

私はTVirtualStringTreeのうち、次のようになり、結果取得しようとしています:は、仮想ツリービュー内のアイテムグループごとにヘッダーバー(TVirtualStringTree)とマスター・ディテール・ビューを作成

desired virtualtreeview appearance

私がいることを信じているがTVirtualStringTree(Mike Lischkeの主なVirtual Treeviewコントロール)を直接使用するか、継承されたコントロールをサブクラス化して継承するか、またはTVirtualDrawTreeに移動することで可能です。ここで

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

actual vritualtreeview appearance

私が持っている問題は、私が取るために、列0のテキストを取得するように見えることができないということです仮想ツリービューコントロールの水平領域全体。私が必要とするように見える複数行のテキストを表示する上級デモのバーチャルツリービューのデモがありますが、ヘッダー行の下に必要な詳細列と組み合わせて適用する方法がわかりません(Node、ノード、画像内のノード)。ここで

は、私が試したものです:BeforeCellPaintイベントで

  • 修正ContentRect.Right:
  • TreeOptions.MiscOptions中にtoGridExtensionsを設定します。ここで

私は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; 

アップデート:下の受け入れ答えを使用して

、私は次を得る:

enter image description here

答えて

5

私はあなたにしたいと思う01 toAutoSpanColumnsオプション(TreeOptions.AutoOptions)、可能であればOnGetCellIsEmptyイベント(最初の列のテキストのみを返す場合は必要ありません)。複数行のノードを取得するには

は(OnInitNodeイベントで)ivsMultiline状態でそれらを初期化またはvtree.MultiLine[Node] := boolean;

+0

ブリリアントを設定します!それはちょうど素晴らしい作品です。 –

関連する問題