CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  VCL组件使用和开发

如何拖动TreeView节点

楼主gyj_china(透明)2006-03-04 16:11:41 在 C++ Builder / VCL组件使用和开发 提问

如何拖动TreeView的节点 问题点数:80、回复次数:5Top

1 楼ccrun(老妖)(www.ccrun.com)回复于 2006-03-04 16:38:08 得分 80

TTreeView的节点拖动例子  
   
  void   __fastcall   TMainForm::TreeView1DragOver(TObject   *Sender,  
              TObject   *Source,   int   X,   int   Y,   TDragState   State,   bool   &Accept)  
  {  
          //   发生在节点被拖动或别的拖动行为发生在TreeView1上的时候  
          TTreeView   *pTreeView   =   dynamic_cast(Source);  
          TScrollInfo   Info;  
          if(pTreeView   ==   TreeView1)  
          {  
                  //   哈哈,是节点被拖动的情况  
                  GetScrollInfo(pTreeView->Handle,   SB_VERT,   &Info);  
                  if(Info.nMin   ==   Info.nMax   )  
                          return;  
                  int   NbPixels   =   abs(pTreeView->Font->Height);  
                  //   根据情况滚动TreeView  
                  if(Y   <   NbPixels)  
                  {  
                          pTreeView->Perform(WM_VSCROLL,   SB_LINEUP,   0);  
                          pTreeView->Refresh();  
                  }  
   
                  if(Y   >   pTreeView->Height   -   NbPixels   -   16)  
                  {  
                          pTreeView->Perform(WM_VSCROLL,   SB_LINEDOWN,   0);  
                          pTreeView->Refresh();  
                  }  
          }  
          else  
                  Accept   =   false;  
  }  
  //------------------------------------  
  void   __fastcall   TMainForm::TreeView1DragDrop(TObject   *Sender,  
              TObject   *Source,   int   X,   int   Y)  
  {  
          //   发生在拖动完成的情况  
          TTreeView   *pTreeView   =   dynamic_cast(Source);  
          TScrollInfo   Info;  
          if(pTreeView   ==   TreeView1)  
          {  
                  //   哈哈,Item拖动完成了  
                  TTreeNode   *pSrcNode;  
                  TTreeNode   *pDstNode;  
                  int   nID;  
                  pSrcNode   =   pTreeView->Selected;   //   获得被拖动的Item  
                  pDstNode   =   pTreeView->GetNodeAt(X,   Y);   //   获得当前鼠标坐标处的Item  
                  if(pDstNode   !=   pSrcNode)   //   Item被拖动到了别的Item处。  
                  {  
                          if(pDstNode   ==   NULL)  
                          {  
                                  //   鼠标当前位置没有Item,所以该Item应该是被拖动到了最上一层,节点成为根节点  
                                  pSrcNode->MoveTo(pTreeView->Items->GetFirstNode(),   naAdd);  
                          }  
                          else  
                          {  
                                  //   节点别拖动到了别的节点处,将要成为该节点的子节点。  
                                  pSrcNode->MoveTo(pDstNode,   naAddChild);  
                          }  
                  }  
                  if(pDstNode   ==   NULL)  
                          nID   =   0;  
                  else  
                          nID   =   (int)pDstNode->ItemId;  
                  //   让系统重新排序所有的Item。  
                  SendMessage(pTreeView->Handle,   TVM_SORTCHILDREN,   0,   nID);  
          }  
  }  
  Top

2 楼ccrun(老妖)(www.ccrun.com)回复于 2006-03-04 16:38:44 得分 0

用FireFox回复真的是非常失败。代码缩进全没了,郁闷。Top

3 楼gyj_china(透明)回复于 2006-03-05 02:01:41 得分 0

老妖,我试了你的代码,发现不行呢?编译通不过,改了一句代码后发现没有拖动效果  
  TTreeView   *pTreeView   =   dynamic_cast<TTreeView   *>(Source);  
   
  是不是哪里还有什么要改罗?请大家多帮一下忙.Top

4 楼ccrun(老妖)(www.ccrun.com)回复于 2006-03-05 14:55:45 得分 0

还需要改一下TreeView的DragMode:  
   
  TreeView1->DragMode   =   dmAutomatic;Top

5 楼gyj_china(透明)回复于 2006-03-05 16:01:37 得分 0

老妖真是强.佩服,问题解决了,谢谢Top

相关问题

  • TreeView 节点拖动问题
  • 如何让TreeView中的已有拖动标记的节点不能再拖动?
  • 如何实现treeview中节点的拖动?
  • 如何实现TreeView节点间的拖动?(C# WinForm)
  • 问关于treeview节点拖动问题
  • 在VB6.0的TreeView控件中如何实现拖动节点,请赐教!!!!
  • treeview 树控件在拖动节点的过程中,如何移动滚动条?
  • 如何使用listview列表项目或treeview节点的OLE拖动?
  • CTreeCtrl的节点拖动如何实现?
  • 请问treeview如何遍历?如何用鼠标拖动实现各个节点位置的调整?

关键词

  • 节点
  • 代码
  • source
  • ptreeview
  • 拖动
  • pdstnode
  • psrcnode
  • treeview
  • ttreeview
  • nid

得分解答快速导航

  • 帖主:gyj_china
  • ccrun

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo