Treenode问题(100分)

  • 主题发起人 主题发起人 mumuwoyou
  • 开始时间 开始时间
M

mumuwoyou

Unregistered / Unconfirmed
GUEST, unregistred user!
如何实现treeview中treenode的拖放
 
用TTreeView.GetNodeAt获取准备移动的Node
用TTreeNode.MoveTo移动到您希望的位置
 
procedure TDmmaicWin.TVDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
var CheckedNode, SourceNode, TargetNode: TTreeNode; CanDrop: Boolean;
begin
//Xmmain为一数据表
SourceNode := (Source as TTreeView).Selected;
TargetNode := TV.GetNodeAt(X, Y);
Accept := False;
CanDrop := False;

//判断是否能拖拉
if (TargetNode = nil) and (Xmmain.State = dsBrowse) then
begin
if SourceNode.Level = 0 then begin Accept := False; CanDrop:= False; end;
if SourceNode.Level >0 then begin Accept := True; CanDrop:= True; end;
end;

//判断是否能拖拉
if (TargetNode <> nil) and (Xmmain.State = dsBrowse) then
begin
Accept := True; CanDrop := True; CheckedNode := TargetNode;
While CheckedNode <> nil do
begin
if CheckedNode.Parent = SourceNode then begin Accept := False; CanDrop := False; Break; end; CheckedNode := CheckedNode.Parent;
end;
if SourceNode = TargetNode then begin Accept := False; CanDrop := False; end;
if SourceNode.Parent = TargetNode then begin Accept := False; CanDrop := False; end;
end;
end;
该函数应该看的懂吧。SourceNode为原Node,TargetNode为目标接点。该函数实现了
数据库TreeView的拖拉功能,Cool,有何不懂再说。
 
多人接受答案了。
 
后退
顶部