OnDragOver处理是否允许放下

procedure TMainForm.TreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var TargetNode, SourceNode: TTreeNode; begin Accept := False; TargetNode := TTreeView(Sender).GetNodeAt(X, Y); if (Source = Sender) and (TargetNode <> nil) then begin Accept := True; SourceNode := TTreeView(Sender).Selected; if TargetNode = SourceNode.Parent then Accept := False; if Accept then begin while (TargetNode.Parent <> nil) and (TargetNode <> SourceNode) do TargetNode := TargetNode.Parent; if TargetNode = SourceNode then Accept := False; end; end; end;

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

procedure TMainForm.TreeViewDragDrop(Sender, Source: TObject; X, Y: Integer); var TargetNode, SourceNode: TTreeNode; begin TargetNode := TTreeView(Sender).GetNodeAt(X, Y); if TargetNode <> nil then begin SourceNode := 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); begin TreeView.DragMode := dmAutomatic; // end;

2: 通过事件动态设定

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

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

  1. DELPHI TreeView 文件目录树和 设置节点图标 完整

        DELPHI TreeView 文件目录树和 设置节点图标 下载地址 http://download.csdn.net/detail/teststudio/6448293 需要制作文档管理软件 ...

  2. 将DataTable中的数据,根据节点的子父节点的Tag。展示到TreeView树状控件中。

    //移除所有分类tvBookType.Nodes.Clear();try{dt = BookTypeServices.GetBookType();}catch (Exception ex){Messa ...

  3. b树删除节点每次只能删一个吗_面试官,请不要问我B+树了!!

    每当我们执行某个 SQL 发现很慢时,都会下意识地反应是否加了索引,那么大家是否有想过加了索引为啥会使数据查找更快呢,索引的底层一般又是用什么结构存储的呢,相信大家看了标题已经有答案了,没错!B+树! ...

  4. html 树形图可拖拽,HTML5拖拽API实现vue树形拖拽组件

    因业务场景需要一个可拖拽修改节点位置的树形组件,因此动手撸了一个,乘此机会摸了一把html5原生拖拽.近期有时间将核心部分代码抽出,简单说下实现方式. 1.树形结构-组件递归使用 树形结构非常简单,t ...

  5. TreeViewVisitor: 一个快捷访问 TreeView 控件节点的帮助类

    Web 开发中经常用到 TreeView 控件,一个很常见的操作就是遍历所有的节点.但是该控件本身并未提供此功能,每次都要手工写递归访问的函数,非常烦琐.所以我写了一个简单的帮助类来解决这个问题,这样 ...

  6. 数据库表TreeView树的快速生成

    数据库表TreeView树的快速生成 根据数据表的内容生成TreeView树状结构,通常的做法就是从顶级开始,然后逐项递归查询遍历生成.这种方法在实现上容易做到,也很容易想到,但是效率比较低,因为数据 ...

  7. html5拖拽表单设计器,require+jquery+backbone实现拖拽式报表设计器-拖拽式表单设计器...

    HTML我帮您-拖拽式报表设计器-拖拽式表单设计器是一个可视化设计器,基于require+jquery+backbone+underscore+bootstrap实现的表单设计器.思想来源于 Layo ...

  8. delphi Treeview用法

    Treeview用于显示按照树形结构进行组织的数据.           Treeview控件中一个树形图由节点(TreeNode)和连接线组成.TtreeNode是TTreeview的基本组成单元. ...

  9. 小程序实现TreeView树多选功能

    话不多说,先上效果图: 小程序实现Treeview树多选功能 实现思路 源数据结构 首先我们的数据结构大概是: [{"id": "0","name&q ...

最新文章

  1. 社区头条:Spring For All 新版上线了!!!
  2. 笔记本上使用Archlinux[转]
  3. java中JScrollPane不显示水平滚动条的解决办法
  4. pandas合并groupby_Pandas-GroupBy,然后在原始表上合并
  5. hdfs查看目录大小文件大小
  6. java blueprint_blueprint(蓝本/蓝图)学习笔记
  7. 一个问题引发的连环血案
  8. 【图像融合】基于matlab图像融合评价指标【含Matlab源码 789期】
  9. bp神经网络预测模型流程图,bp神经网络实例分析
  10. 达梦数据库管理工具介绍
  11. 乱码转换器在线转换_有了这几款视频下载转换软件,想看的视频都可以随意看了...
  12. Redis 单线程却能支撑高并发
  13. foxmai邮件服务器pop,常见pop和stmp服务器地址-foxmail6或outlook邮件管理
  14. 移动端怎么让底部固定_逆冬:移动端排名应该怎么做?两种匹配移动端实战排名干货分享!...
  15. react图片剪裁react-cropper
  16. Excel分列-字母与汉字(前后)
  17. shell十三问(转)
  18. 请问网页的在线聊天怎么实现
  19. day02-Java基础语法以及IDLE的安装和使用
  20. 客户问我,他都已经提供了那么多硬盘,你们之前也说可以存满90天,为什么监控录像还是没有90天?

热门文章

  1. 两万字深度讲解系统设计!超详细解析!面试复习必备!
  2. w3c标准语言的是什么,W3C标准及其规范 - Somuns的个人空间 - OSCHINA - 中文开源技术交流社区...
  3. linux – Docker:无法添加对接口(不支持操作)
  4. Kubernetes入门一:介绍及环境准备
  5. 抖音短视频变现的渠道有哪些
  6. Android攻城狮AsyncTask
  7. alios things开发板_AliOS Things这个操作系统怎么样?
  8. Python numpy.abs和abs函数别再傻傻分不清了
  9. win10三国志14已停止工作解决方法--win10专业版
  10. 必须吹吹自己,太厉害了!-简直不敢相信,面试拼多多我只用了15天就成功拿下offer,