Recurrence method selection tree node control drag and drop
Suitable for N-layer trees, general purpose
.pas
unit treeRecursion; {Title: recursion selected child node tree control drag OF: Vigor Time: 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;
VAR FORM1: TFORM1; G_StartNode: Ttreenode;
IMPLEMentation
{$ R * .dfm} {Drag and drop control preparation conditions: Source Control Dragkind: = DKDRAG; Dragcursor: = CRDEFALT; DragMode: = DMMANUAL; Target Control Empirus step: 1. Start dragging ONMOUSEDOWN BEGINDRAG Receive Drag Project OnDragover (Target Control) 3. Lower Drag Project OnDragDrop (Target Control) 4. Terminate Drag Operation OneEndDrag (Source Control)}
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 dam (TRIM (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 dam g_startnode: = TreeView1.getnode (x, y); if assigned (g_startnode) THEEVIEW1.BEGINDRAG (TRUE); 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 The begin AddselectedChildrentolistBox (TreeView1, g_startnode, listbox1); end; end;
End.
.dfm
object Form1: TForm1 Left = 210 Top = 148 Width = 602 Height = 480 Caption = 'recursion selected child node tree control drag' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font .Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Splitter1: TSplitter Left = 273 Top = 0 Height = 446 end object TreeView1: TTreeView Left = 0 Top = 0 Width = 273 Height = 446 align = alleft Dragcursor = crmultidrag indent = 19 readonly = true taborder = 0 onMousedown = TreeView1MOUsedown items.data =
{020000001D0000000000000000000000FFFFFFFFFFFFFFFF0000000003000000 04B2E9D1AF270000000000000000000000FFFFFFFFFFFFFFFF00000000000000 000ED1A7D4D3B7D1C3F7CFB8B2E9D1AF270000000000000000000000FFFFFFFF FFFFFFFF00000000000000000ECAD5B7D1C8D5B1A8B1EDB2E9D1AF2100000000 00000000000000FFFFFFFFFFFFFFFF000000000300000008CDB3BCC6B2E9D1AF 250000000000000000000000FFFFFFFFFFFFFFFF00000000030000000CB2BFC3 C5CDB3BCC6B2E9D1AF270000000000000000000000FFFFFFFFFFFFFFFF000000 00030000000EB2BFC3C5CDB3BCC6B2E9D1AFD2BB230000000000000000000000 FFFFFFFFFFFFFFFF00000000000000000AB2BFC3C5B8DFBCB6D2BB2300000000 00000000000000FFFFFFFFFFFFFFFF00000000000000000AB2BFC3C5B8DFBCB6 B6FE230000000000000000000000FFFFFFFFFFFFFFFF00000000000000000AB2 BFC3C5B8DFBCB6C8FD270000000000000000000000FFFFFFFFFFFFFFFF000000 00000000000EB2BFC3C5CDB3BCC6B2E9D1AFB6FE270000000000000000000000 FFFFFFFFFFFFFFFF00000000020000000EB2BFC3C5CDB3BCC6B2E9D1AFC8FD23 0000000000000 000000000FFFFFFFFFFFFFFFF00000000000000000AB2BFC3C5 B8DFBCB6CBC4230000000000000000000000FFFFFFFFFFFFFFFF000000000200 00000AB2BFC3C5B8DFBCB6CEE5230000000000000000000000FFFFFFFFFFFFFF FF00000000000000000AB2BFC3C5B3ACBCB6D2BB230000000000000000000000 FFFFFFFFFFFFFFFF00000000000000000AB2BFC3C5B3ACBCB6B6FE2500000000 00000000000000FFFFFFFFFFFFFFFF00000000000000000CC4EABCB6CDB3BCC6 B2E9D1AF290000000000000000000000FFFFFFFFFFFFFFFF0000000000000000 10B2BFC3C5C4EABCB6CDB3BCC6B2E9D1AF210000000000000000000000FFFFFF FFFFFFFFFF000000000300000008D3A6CAD5B4A6C0ED21000000000000000000 0000FFFFFFFFFFFFFFFF000000000300000008D3A6CAD5B3F5CABC2100000000 00000000000000FFFFFFFFFFFFFFFF000000000000000008CAD6B6AFB3F5CA