Delphi TreeView Drag and Drop でノードを移動

 Delphi の TreeView(TTreeView) ノードをドラッグ・アンド・ドロップで移動させるコード

TreeView の DragMode プロパティを dmAutomatic にしておく
// TreeView1.DragMode := dmAutomatic;

procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
    SourceNode, TargetNode: TTreeNode;
begin
    SourceNode := TreeView1.Selected;
    TargetNode := TreeView1.GetNodeAt(X, Y);

    if Assigned(SourceNode) and Assigned(TargetNode) then begin
        SourceNode.MoveTo(TargetNode, naInsert);
    end;
end;

procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
var
    SourceNode, TargetNode: TTreeNode;
begin
    SourceNode := TreeView1.Selected;
    TargetNode := TreeView1.GetNodeAt(X, Y);
    
    Accept := Assigned(SourceNode) and Assigned(TargetNode) and (TargetNode <> SourceNode);
end;
OnDragOver でドロップしてよい場所を判定、OnDragDrop で TargetNode 位置へ、SourceNode(ドラッグしたノード)をインサート

コメント