注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

成功源于细节

梦想、奋斗、收获

 
 
 

日志

 
 
 
 

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

2011-08-13 13:05:08|  分类: delphi |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
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本身还需要设定支持拖放,俩个方法
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;

来自:http://blog.csdn.net/samoongeer/article/details/5684347
  评论这张
 
阅读(769)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017