递归法选取树子节点 + 控件拖放 适合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
|