|
||
解説: 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); } //------------------------------------------------------------------- |