Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Treeview kopieren (https://www.delphipraxis.net/11821-treeview-kopieren.html)

Goldorak 14. Nov 2003 12:57


Treeview kopieren
 
Hallo,

Ich suche verzweifelt nach einer einfache Möglichkeit ein Treeview automatisch in einem anderen Treeview zu aktualisieren :

Beispiel

MeinTreeview
|
+ ShellTreeview
|
+ DBTreeview

Beide Treeview (ShellTreeview und DBTreeview) bleiben versteckt, aber wenn sich was tut, soll es in MeinTreeview so einfach wie nur möglich aktualisiert werden (inkl. Images... wenn schon :lol: )

Hat jemand 'ne Idee ?

scp 14. Nov 2003 13:13

Re: Treeview kopieren
 
Delphi-Quellcode:
  TreeView2.items.Assign(TreeView1.Items);

  If Assigned(TreeView1.Images) then
    TreeView2.Images := TreeView1.Images;

  If Assigned(TreeView1.StateImages) then
    TreeView2.StateImages :=TreeView1.StateImages;

Goldorak 14. Nov 2003 14:17

Re: Treeview kopieren
 
Hab' mich vielleicht falsch ausgedrückt :

Die 2 TVs sind bestandteil von der eine.

Meine Root --- 1. Node = Root von TV1
--- 2. Node = Root von TV2
--- 3. Node = Root von TV3

scp 14. Nov 2003 16:01

Re: Treeview kopieren
 
Na, dann so in etwa:

Delphi-Quellcode:
procedure AssignChildren(Source, Dest : TTreeNode);
var
  subtn : TTreeNode;
  i : integer;
begin
  Dest.DeleteChildren;
  for i := 0 to (Source.Count-1) do
    If (Source.Item[i].Parent = Source) then
    begin
      subtn := TTreeView(Dest.TreeView).Items.AddChild(Dest, '');
      subtn.Assign(Source.Item[i]);

      If Source.Item[i].HasChildren then
        AssignChildren(Source.Item[i], subtn);
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
  tn : TTreeNode;
begin
  for i := 0 to (TreeView1.Items.Count-1) do
    begin
      If TreeView1.Items[i].Parent = nil then
        begin
          tn := TreeView2.items.AddChild(TreeView2.items[0], '');
          with tn do
            begin
              Assign(TreeView1.Items[i]);

              If TreeView1.Items[i].HasChildren then
                AssignChildren(TreeView1.Items[i], tn);
            end;
        end;
    end;

  If Assigned(TreeView1.Images) then
    begin
      If not Assigned(TreeView2.Images) then
        TreeView2.Images := TImageList.Create(nil);
      TreeView2.Images.AddImages(TreeView1.Images);
    end;

  If Assigned(TreeView1.StateImages) then
    begin
      If not Assigned(TreeView2.StateImages) then
        TreeView2.StateImages := TImageList.Create(nil);
      TreeView2.StateImages.AddImages(TreeView1.StateImages);
   end;
end;
In dem Fall ist TreeView1 einer der versteckten TVs und TreeView2 ist derjenige, der die Untereinträge bekommt.

Goldorak 18. Nov 2003 11:08

Re: Treeview kopieren
 
Danke !
Sowas in die Richtung wird es wohl sein.
Habe z.Z. nur das Problem, daß der erste TV ein ShellTreeView ist, der keine Imagelist hat.
Der zweite TV wird ein DBTV sein, und da werde ich dein Typ gut brauchen können

japetos 9. Sep 2005 15:17

Re: Treeview kopieren
 
Hallo.

ich habe ein aehnliches Problem.

in meinem TreeView moechte ich die Veraenderung eines Knotens (nach Drag&Drop) in einer DB Speichern.
Habt ihr eine Idee wie ich das loesen koennte?

Dann waere mein Progg fertig.

so siehts im Moment aus:
Code:
var
  NR : TNodeRecord;
  FF : TField;
begin
  NR := KADaoDBTreeView1.GetNodeData(Node);
  if Assigned(NR.Fields) Then
     //FF := NR.Fields.FieldByName('OtherData');
end;
aber das FieldByName wird nicht akteptiert.

:(


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz