procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); var AnItem: TTreeNode; AttachMode: TNodeAttachMode; HT: THitTests; begin if TreeView1.Selected = nil then Exit; HT := TreeView1.GetHitTestInfoAt(X, Y); AnItem := TreeView1.GetNodeAt(X, Y); if (HT - [htOnItem, htOnIcon, htNowhere, htOnIndent] <> HT) then begin if (htOnItem in HT) or (htOnIcon in HT) then AttachMode := naAddChild else if htNowhere in HT then AttachMode := naAdd else if htOnIndent in HT then AttachMode := naInsert; if SourceNode=AnItem then Exit; TreeView1.Selected.MoveTo(AnItem, AttachMode); end; end;procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept:=True; end;procedure TForm1.TreeView1StartDrag(Sender: TObject; var DragObject: TDragObject); begin SourceNode:=TreeView1.Selected; end;
var SourceNode : TTreeNode;procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); var AnItem: TTreeNode; AttachMode: TNodeAttachMode; HT: THitTests; begin if TreeView1.Selected = nil then Exit; HT := TreeView1.GetHitTestInfoAt(X, Y); AnItem := TreeView1.GetNodeAt(X, Y); AttachMode := naAdd; if (HT - [htOnItem, htOnIcon, htNowhere, htOnIndent] <> HT) then begin if (htOnItem in HT) or (htOnIcon in HT) then AttachMode := naAddChild else if htNowhere in HT then AttachMode := naAdd else if htOnIndent in HT then AttachMode := naInsert; if SourceNode=AnItem then Exit; TreeView1.Selected.MoveTo(AnItem, AttachMode); end; end;procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept:=True; end;procedure TForm1.TreeView1StartDrag(Sender: TObject; var DragObject: TDragObject); begin SourceNode:=TreeView1.Selected; end;
var // 全局变量 SourceNode : TTreeNode;
procedure TfrmMain.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); var srcNode, destNode: TTreeNode; begin if (Source = TreeView1) then with TreeView1 do begin srcNode := Selected; destNode := GetNodeAt(X, Y); if srcNode.Parent = destNode.Parent then // 若是同级移动 srcNode.MoveTo(destNode, naInsert); end; end;procedure TfrmMain.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := True; end;
var
AnItem: TTreeNode;
AttachMode: TNodeAttachMode;
HT: THitTests;
begin
if TreeView1.Selected = nil then Exit;
HT := TreeView1.GetHitTestInfoAt(X, Y);
AnItem := TreeView1.GetNodeAt(X, Y);
if (HT - [htOnItem, htOnIcon, htNowhere, htOnIndent] <> HT) then
begin
if (htOnItem in HT) or (htOnIcon in HT) then AttachMode := naAddChild
else if htNowhere in HT then AttachMode := naAdd
else if htOnIndent in HT then AttachMode := naInsert;
if SourceNode=AnItem then
Exit;
TreeView1.Selected.MoveTo(AnItem, AttachMode);
end;
end;procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept:=True;
end;procedure TForm1.TreeView1StartDrag(Sender: TObject;
var DragObject: TDragObject);
begin
SourceNode:=TreeView1.Selected;
end;
但也可只要记录前后位置后,再对数据表进行移动,最后重新生成树,
这也是一种好办法.
SourceNode : TTreeNode;procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
AnItem: TTreeNode;
AttachMode: TNodeAttachMode;
HT: THitTests;
begin
if TreeView1.Selected = nil then Exit;
HT := TreeView1.GetHitTestInfoAt(X, Y);
AnItem := TreeView1.GetNodeAt(X, Y);
AttachMode := naAdd;
if (HT - [htOnItem, htOnIcon, htNowhere, htOnIndent] <> HT) then
begin
if (htOnItem in HT) or (htOnIcon in HT) then AttachMode := naAddChild
else if htNowhere in HT then AttachMode := naAdd
else if htOnIndent in HT then AttachMode := naInsert;
if SourceNode=AnItem then
Exit;
TreeView1.Selected.MoveTo(AnItem, AttachMode);
end;
end;procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept:=True;
end;procedure TForm1.TreeView1StartDrag(Sender: TObject;
var DragObject: TDragObject);
begin
SourceNode:=TreeView1.Selected;
end;
SourceNode : TTreeNode;
Y: Integer);
var
srcNode, destNode: TTreeNode;
begin
if (Source = TreeView1) then
with TreeView1 do begin
srcNode := Selected;
destNode := GetNodeAt(X, Y);
if srcNode.Parent = destNode.Parent then // 若是同级移动
srcNode.MoveTo(destNode, naInsert);
end;
end;procedure TfrmMain.TreeView1DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := True;
end;