AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Treeview Zweig woanders kopieren

Ein Thema von Jelly · begonnen am 29. Mär 2007 · letzter Beitrag vom 3. Apr 2007
 
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#3

Re: Treeview Zweig woanders kopieren

  Alt 3. Apr 2007, 08:45
Hallo

Ich habe mal die CopySubtree Funktion von P. Below verwendet.


Delphi-Quellcode:
Type
  {: Callback to use to copy the data of a treenode when the
    node itself is copied by CopySubtree.
  @param oldnode is the old node
  @param newnode is the new node
  @Desc Use a callback of this type to implement your own algorithm
    for a node copy. The default just uses the Assign method, which
     produces a shallow copy of the nodes Data property. }
 
  TCopyDataProc = Procedure( oldnode, newnode: TTreenode );


{: The default operation is to do a shallow copy of the node, via
Assign. }
 
Procedure DefaultCopyDataProc( oldnode, newnode: TTreenode );
  Begin
    newnode.assign( oldnode );
  End;


{-- CopySubtree
-------------------------------------------------------}
 
{: Copies the source node with all child nodes to the target treeview.
@Param sourcenode is the node to copy
@Param target is the treeview to insert the copied nodes into
@Param targetnode is the node to insert the copy under, can be nil to
  make the copy a top-level node.
@Param CopyProc is the (optional) callback to use to copy a node.
  If Nil is passed for this parameter theDefaultCopyDataProc will be
used.
@Precondition  sourcenode <> nil, target <> nil, targetnode is either
  nil or a node of target
@Raises Exception if targetnode happens to be in the subtree rooted in
  sourcenode. Handling that special case is rather complicated, so we
  simply refuse to do it at the moment.


}
{ Created 2003-04-09 by P. Below


-----------------------------------------------------------------------

}
 

Procedure CopySubtree( sourcenode: TTreenode; target: TTreeview;
    targetnode: TTreenode; CopyProc: TCopyDataProc = nil );
  Var
    anchor: TTreenode;
    child: TTreenode;
  Begin { CopySubtree } 
    Assert( Assigned( sourcenode ),
            'CopySubtree:sourcenode cannot be nil' );
    Assert( Assigned( target ),
            'CopySubtree: target treeview cannot be nil' );
    Assert((targetnode = nil) or (targetnode.TreeView = target ),
            'CopySubtree: targetnode has to be a node in the target
treeview.
' );

    If (sourcenode.TreeView = target) and
       (targetnode.HasAsParent( sourcenode ) or (sourcenode =
targetnode))
    Then
      raise Exception.Create(
              'CopySubtree cannot copy a subtree to one of the '+
              'subtrees nodes.');


    If not Assigned( CopyProc ) Then
      CopyProc := DefaultCopyDataProc;


    anchor := target.Items.AddChild( targetnode, sourcenode.Text );
    CopyProc( sourcenode, anchor );
    child := sourcenode.getFirstChild;
    While Assigned( child ) Do Begin
      CopySubtree( child, target, anchor, CopyProc );
      child := child.getNextSibling;
    End; { While } 
  End; { CopySubtree } 


procedure TForm1.Button1Click(Sender: TObject);
begin
  if assigned(treeview1.selected) then
    CopySubtree( treeview1.selected, treeview2, nil );
end;
Thomas
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz