转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
递归法选取树子节点 + 控件拖放         ★★★★

递归法选取树子节点 + 控件拖放

作者:闵涛 文章来源:闵涛的学习笔记 点击数:695 更新时间:2009/4/23 18:27:03

递归法选取树子节点 + 控件拖放

适合N层树,通用

unit treeRecursion;
{
 标题: 递归法选取树子节点 + 控件拖放
 作者: vigor
 时间: 2004.3.26
}
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    ListBox1: TListBox;
    Splitter1: TSplitter;
    procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure AddSelectedChildrenToListbox(tree : TTreeView;startNode :TTreeNode;listBox :TListBox);
  end;

var
  Form1: TForm1;
  g_startNode : TTreeNode;

implementation

{$R *.dfm}
{
拖放控件
准备条件:
      源控件    DragKind :=dkDrag; DragCursor :=crDefalt; DragMode :=  dmManual;
      目标控件
实施步骤:
      1. 开始拖动操作 onMouseDown BeginDrag  ( 源控件 )
    2. 接收拖动项目 OnDragOver             (目标控件)
    3. 放下拖动项目 OnDragDrop             (目标控件)
    4. 终止拖动操作 OnEndDrag             ( 源控件 )
}

procedure TForm1.AddSelectedChildrenToListbox(tree: TTreeView;
                      startNode: TTreeNode; listBox: TListBox);
var
   curParent : TTreeNode;
begin
   if not(tree.Selected.HasChildren) then
   begin
      if listBox.Items.IndexOf(Trim(tree.Selected.Text)) = -1 then
         listBox.Items.Add(Trim(tree.Selected.Text));
   end
   else
   begin
      tree.Selected := tree.Selected.GetNext;
      while tree.Selected<>nil do
      begin
         curParent := tree.Selected;//保护现场^^
         AddSelectedChildrenToListbox(tree,tree.Selected,listBox);
         tree.Selected := curParent.getNextSibling;//恢复现场^^
      end;
   end;
end;

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   if Button = mbLeft then
   begin
      g_startNode := TreeView1.GetNodeAt(X,Y);
      if Assigned(g_startNode) then
         TreeView1.BeginDrag(True);
   end;
end;

procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
   if Source = TreeView1 then
      Accept := True;
end;
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
   if Source = TreeView1 then
   begin
      AddSelectedChildrenToListbox(treeview1,g_startNode,listbox1);
   end;
end;

end.


[Sql Server]Sql精妙语句--各种求值函数  [网页制作]网页表格之---多个表格纵向排列
[网页制作]JavaScript另类用法--读取和写入cookie  [网页制作]号称非常安全的上网工具---360安全浏览器介绍
[办公软件]信息技术教学篇---Word工具栏的显示、隐藏及四种菜…  [操作系统]开始菜单---运行命令大总结
[操作系统]网络转载---64位操作系统与32位的区别  [操作系统]ldap:///(没有响应)Windows无法访问指定设备、路径…
[网络技术]安全篇---交换机设置方法介绍  [聊天工具]Real10 & Xpdf installation on Linux Box
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台