1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Delphi TreeView树型框节点拖拽停靠 按条件开始拖拽

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

时间:2018-10-05 21:55:41

相关推荐

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;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。