欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Delphi TreeView树型框节点拖拽停靠、按条件开始拖拽

发布时间:2024/3/13 69 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Delphi TreeView树型框节点拖拽停靠、按条件开始拖拽 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

OnDragOver处理是否允许放下

procedure TMainForm.TreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); varTargetNode, SourceNode: TTreeNode; beginAccept := False;TargetNode := TTreeView(Sender).GetNodeAt(X, Y);if (Source = Sender) and (TargetNode <> nil) thenbeginAccept := True;SourceNode := TTreeView(Sender).Selected;if TargetNode = SourceNode.Parent thenAccept := False;if Accept thenbeginwhile (TargetNode.Parent <> nil) and (TargetNode <> SourceNode) doTargetNode := TargetNode.Parent;if TargetNode = SourceNode thenAccept := False;end;end; end;

OnDragDrop是放下后节点的处理方法

procedure TMainForm.TreeViewDragDrop(Sender, Source: TObject; X, Y: Integer); varTargetNode, SourceNode: TTreeNode; beginTargetNode := TTreeView(Sender).GetNodeAt(X, Y);if TargetNode <> nil thenbeginSourceNode := TTreeView(Sender).Selected;TTreeView(Sender).Items.BeginUpdate;SourceNode.MoveTo(TargetNode, naAddChildFirst);TTreeView(Sender).Selected := SourceNode;TTreeView(Sender).Items.EndUpdate;end; end;

另外TreeView本身还需要设定支持拖放,俩个方法

1: 静态设定TreeView可以拖放

procedure TMainForm.FormCreate(Sender: TObject); beginTreeView.DragMode := dmAutomatic;// end;

2: 通过事件动态设定

procedure TMainForm.TreeViewMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); beginif (Button = mbLeft) and (htOnItem in TTreeView(Sender).GetHitTestInfoAt(X, Y)) then //判断是左键并且点击在Item上beginif (ssCtrl in Shift) then //如果按下了Ctrl键TTreeView(Sender).BeginDrag(False); //允许拖放end; end;

总结

以上是生活随笔为你收集整理的Delphi TreeView树型框节点拖拽停靠、按条件开始拖拽的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。