goo blog サービス終了のお知らせ 

LoveBeerのDelphi Blog

開発日誌

VirtualTreeView 行ごとの背景色を変える

2008-02-01 02:30:10 | コンポーネント
タグ: VirtualTreeView 行 色

行ごとに色を変えることはよくある。
例えば、偶数行と奇数行で色を変えるときは、
  OnBeforeItemErase イベント
で処理する。

procedure TForm1.vtreeBeforeItemErase(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect;
  var ItemColor: TColor; var EraseAction: TItemEraseAction);
begin
  if not (vsSelected in Node.States) then
  begin
    if (Node.Index and 1) <> 0 then
      Color := ColorListOdd
    else
      Color := ColorListEven;

    EraseAction := eaColor;
  end;
end;

VirtualTreeView 編集可/不可を制御する

2008-01-31 13:38:58 | コンポーネント
タグ: VirtualTree VirtualTreeView

編集可/不可を制御する
Tree.Editing イベントで処理する。

例) 2カラム, 3カラムのみ入力可能にする
procedure TForm1.vtreeEditing(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean);
begin
  if Column in [2, 3] then
    Allowed := true
  else
    Allowed := false;
end;

ここまでの処理では、カーソルの移動までは制御しない。
もし、カーソルも移動しないようにするには
Tree.FocusChanging イベントも合わせて処理する。

例) 2カラム, 3カラムのみカーソル移動可能にする
procedure TForm1.vtreeFocusChanging(Sender: TBaseVirtualTree; OldNode, NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex; var Allowed: Boolean);
begin
  if NewColumn in [2, 3] then
    Allowed := true
  else
    Allowed := false;
end;

VirtualTreeView で Excelライクな入力

2008-01-31 13:17:48 | コンポーネント
タグ: VirtualTreeView クラス class 入力

VirtualTreeViewクラスにExcelライクな入力を実装。

サンプルコードはこちら。
VTExcelLike.ZIP

満たしている機能は以下の通り。

  • セル上で入力を開始すると、自動的にEditLinkが作成される
  • セルをダブルクリックすると、自動的にEditLinkが作成される
  • ENTERキーやTABキーなどで次のセルへ移動
  • ENTERキーの移動方向は tree.MoveDirection プロパティで設定可能

    編集に関する受け渡しは次の2つのイベントで処理する。
    CreateEditor イベント: EditLink を作成
    NewText イベント: 入力結果を受け取る

    サンプルでは、TEdit クラスでの入力を実装している。
    入力コントロールをコンボボックスなどに変更したい場合、TVT2BaseEditLink クラスから継承して、独自の EditLink を作成することで実現できる。