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

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

TreeView の DragMode プロパティを dmAutomatic にしておく
  1. // TreeView1.DragMode := dmAutomatic;  
  2.   
  3. procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);  
  4. var  
  5.     SourceNode, TargetNode: TTreeNode;  
  6. begin  
  7.     SourceNode := TreeView1.Selected;  
  8.     TargetNode := TreeView1.GetNodeAt(X, Y);  
  9.   
  10.     if Assigned(SourceNode) and Assigned(TargetNode) then begin  
  11.         SourceNode.MoveTo(TargetNode, naInsert);  
  12.     end;  
  13. end;  
  14.   
  15. procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);  
  16. var  
  17.     SourceNode, TargetNode: TTreeNode;  
  18. begin  
  19.     SourceNode := TreeView1.Selected;  
  20.     TargetNode := TreeView1.GetNodeAt(X, Y);  
  21.       
  22.     Accept := Assigned(SourceNode) and Assigned(TargetNode) and (TargetNode <> SourceNode);  
  23. end;  
OnDragOver でドロップしてよい場所を判定、OnDragDrop で TargetNode 位置へ、SourceNode(ドラッグしたノード)をインサート

コメント