TVirtualTreeViewコンポーネントの基本的使用法

ども、Norimakiです。

今回はDelphi技術資料ということで、
TVirtualTreeViewの使用法についての備忘録です。

海外製のコンポーネントということでマニュアルが英語なわけです。
おいおいおい、英語なんて読めねーよ。

と、右往左往していたところに
チュートリアルなるものがあると耳にしました。

Treeview_Tutorial.pdf

これで検索すると見つかるらしいので、
気になる方は検索してみてください。
まぁ、こちらも英語ですが。


僕の場合ですが、VirtualTreeViewをどうやって使うのか?
というと、TreeViewとして使う場合と、ListViewとして使う場合に
分けられます。

合体して使うということは今まで経験がありません。
必要に迫られなかったというのが理由ではありますが。

さて、とりあえずListViewとして使用したいと。
でも、私、今までvsReport的な使い方しかしていないので、
そこら辺の使用法にとどまります。

とにかく、このコンポーネントは表示するにはイベントで。
ということが求められます。

例外はチェックボックスでしょうかね。
チェックボックスについては、プロパティ設定とちょっとした初期コードで
表示してくれるという何とも簡単な設計になっています。

その辺も後々書くとしまして。

これから思いついた時点で思いついたことを書き残していきます。
なので、話題があっちこっちに飛ぶ場合があるので、ご容赦下さい。

今回のお品書きはこんな感じ。

・ヘッダカラムの設定
・アイテムの追加
・アイテムの表示
・イメージの表示
・チェックボックスの表示

ヘッダカラムの設定

コンポーネントをダブルクリックするとヘッダカラムを編集する画面が出てきます。
そこで、追加することでヘッダを追加することができます。

Textプロパティにカラム名を設定します。
Widthプロパティで横幅の設定。
Alignmentプロパティで右寄せ、中央、左寄せが設定出来ます。

CaptionAlignmentというプロパティがあるんですが、
これがAlignmentプロパティと連動して動くんですよね。
OptionsプロパティのcoUseCaptionAlignmentが関係しているかもしれません。

なんかそれっぽいです。

CheckBoxというプロパティがありますが、
ここの使い方はまだ判明していません。
CheckState、CheckTypeも同様です。

Optionsプロパティについて分かっているのは次の通り、
・coAllowClick
・coDraggable     カラムをドラッグできるかどうか
・coEnabled
・coParentBidMode
・coParentColor
・coResizable     リサイズできるかどうか
・coShowDropMark
・coVisivble      表示するかどうか
・coAutoSpring
・coFixed
・coSmartResize
・coAllowFocus
・coDisableAnimateResize
・coWrapCaption
・coUseCaptionAlignment

その他のプロパティについては、分かり次第追記します。

そうそう、VirtualTreeViewコンポーネントのHeaderプロパティの
OptionsのhoVisibleをTrueにすることでヘッダが表示されます。

アイテムの追加

アイテムの追加は

ComponentName.Items.AddChild(nil);

という感じで。ここではレポート形式の利用を想定しているので
このような感じになっています。

ちなみに、AddChildの引数について、ここではnilが指定されていますが
TreeView的に使用するなら、ここには親ノードのポインタが入ります。

アイテムの表示

アイテムの表示には、OnGetText イベントを使用します。

引数は

(Sender: TBaseVirtualTree;
Node: PVirtualNode;
Column: TColumnIndex;
TextType: TVSTTextType;
var CellText: string)

という感じで定義されています。

Senderは呼び出したVirtualTreeViewコンポーネント
Nodeは表示対象となるノード
Columnは表示対象となるカラムインデックス
TextTypeはテキストタイプ(ttNormal,ttStatic)よくわかりません。
CellTextは表示すべきテキスト

となります。

多くの場合は Case文でColumnの値に応じて分岐させ、
カラムインデックスに従ってCellTextに表示データを設定する。

という処理になるかと思います。

イメージの表示

イメージの表示にはOnGetImageイベントを使用します。

当然ですが、ImageListコンポーネントを設置して、
VirtualTreeViewコンポーネントに設定しておく必要があります。

引数は

(Sender: TBaseVirtualTree;
Node: PVirtualNode;
Kind: TVTImageKind;
Column: TColumnIndex;
var Ghosted: Boolean;
var ImageIndex: Integer);

という感じです。Sender、Node,Columnに関してはOnGetTextイベントと
同様ですので省略します。

Kind、Ghosted、ImageIndexが新たに出て来ましたが、
ImageIndexというのにイメージインデックスを設定することで
イメージを表示させられる。と言うことはわかると思います。

Kind、Ghostedとは何か?

Kindについては、このように定義されているので、

TVTImageKind = (
ikNormal,
ikSelected,
ikState,
ikOverlay
);

ノードの状態ではなかろうかと思います。通常状態、選択状態など。
ikState,ikOverlayってどういう意味なんでしょうか?

Ghostedというのは、アイコンイメージをDisableにする
というものらしいですが、よくわかりません。
チュートリアルPDFにはそんな感じで書かれています。

チェックボックスの表示

OnInitNodeイベントというイベントがありますが、そのイベントに

Node.CheckType :=ctCheckBox;
Node.CheckState:=csUncheckedNormal;

という記述をすると、チェックボックスが表示されるようになります。

その際に、

VirtualTreeViewのTreeOprionsプロパティのMiscOptionsの
toCheckSupportをTrueにする必要があります。

これでチェックボックスが表示されます。
チェックボックスのイメージはCheckImageKindプロパティで設定出来ます。

とりあえずこんな感じでしょうかね。

てか、オレンジ色の文字って読みにくいな。

ではでは。
Norimakiでした。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする