ホーム
|
アプリケーション | Tips | ダウンロード | プログラム
| コラム

CBアプリ工房


Tips >   

Drag&Drop で Node 追加 

更新 : 2010/02/19

 



解説:
TreeView コンポーネントを使ったアプリケーションを組んでいると、いろいろな対象からデータをNode へ移動したりコピーする必要が出てきます。
たとえば、画像ビューアなどで、画像ファイルを TreeView にコピーする場合などが考えられます。

ここでは使いかってのよいドラッグ&ドロップを利用して、他のコンポーネントから Node に文字列をコピーしてみます。

使用例:
Panel1 の Caption をドラッグ&ドロップで TreeView1 の Node にコピーしています。

コンポーネントは TreeView と Panel を適当に配置してください。
TreeView1 には項目をいくつか追加しておきます(例では、"abc", "123" 作成)。
Panel1 の DragMode プロパティは dmAutomatic に設定しておいてください。

アプリケーションを起動して、Panel1 の上にポインタを置きマウスボタンを押します。そのままTreeView1 内にドラッグして、"abc" にドロップすると、Panel1 の Caption 文字列が子ノードとして作成されます。

OnDraOver イベントで、Accept を true に設定して、ドラッグしたオブジェクトが TreeView1 にドロップできるようにしておきます。
OnDragDrop イベントでは、マウスの座標を X と Y パラメータから取得して、その位置にあるNode にアクセスします。メソッドは GetNodeAt を使います。
アクセスしたノードに AddChild メソッドで、新しい子ノードを追加しています。

//-------------------------------------------------------------------
void __fastcall TForm1::TreeView1DragOver(TObject *Sender, TObject *Source,
    int X, int Y, TDragState State, bool &Accept)
{
    Accept = True;
}
//-------------------------------------------------------------------
void __fastcall TForm1::TreeView1DragDrop(TObject *Sender, TObject *Source,
    int X, int Y)
{
    // どの Node が指定されたか判定
    TTreeNode *target = TreeView1->GetNodeAt(X, Y);

    // パラメータで指定した Node の子ノードを追加
    TreeView1->Items->AddChild(target, Panel1->Caption);
}
//-------------------------------------------------------------------



[ ホーム | ページトップ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.