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/)
-   -   Treeview nur den geklickten Node expandieren (https://www.delphipraxis.net/171496-treeview-nur-den-geklickten-node-expandieren.html)

josefkoller 8. Nov 2012 18:19

Treeview nur den geklickten Node expandieren
 
Hallo,

ich komm einfach nicht drauf. Die Lösung des Problems scheint so einfach zu sein, daß ich beim Googeln auch nichts dazu finde.

Ich hab in einem Treeview Einträge. So in etwa:

Adresse 1 (Level 0);
- Bestellungen (Level 1)
- Artikel (Level 2
....
Adresse 2 (Level 0);
- Bestellungen (Level 1)
- Artikel (Level 2

Beim Aktivieren der Form soll der erste Eintrag expandiert werden, also der gesamte "erste Teil" aufgeklappt werden.
Das bring ich noch hin mit

tv.Items.Item[0].Expand(true);

Beim Klick oder besser beim Fokusieren auf einen anderen Eintrag, soll der vorige Eintrag zugeklappt werden und der fokusierte oder geklickte Eintrag expandiert werden.

Beim OnClick hab ich folgendes probiert:

TV.Items.Item[TV.Tag].Collapse(true);

TV.Selected.Expand(true);
TV.Tag:=TV.Selected.Index;

Im Tag steht auch der richtige Index nur, der vorherige Eintrag wird damit einfach nicht zugeklappt.

Könnt ihr mir sagen, wie man sowas richtig macht.

Danke.

Josef

Steku 8. Nov 2012 18:25

AW: Treeview nur den geklickten Node expandieren
 
Hi,

dann klappe doch nach dem Klick erst mal deinen
Tree komplett zu (DeinTree.FullCollapse...glaube ich...)
und öffnest ihn wieder ab der erneut geklickten Node.
Vielleicht reicht das ja schon für den gewünschten Effekt.

Gruß
Steku

shmia 8. Nov 2012 18:38

AW: Treeview nur den geklickten Node expandieren
 
Zitat:

Zitat von josefkoller (Beitrag 1190411)
Die Lösung des Problems scheint so einfach zu sein

Delphi-Quellcode:
property AutoExpand: Boolean;

Description
Set AutoExpand to True to cause the selected item to expand and the unselected items to collapse.

josefkoller 8. Nov 2012 18:52

AW: Treeview nur den geklickten Node expandieren
 
Hi,

danke für die schnelle Antwort.

So ähnlich hatte ich es auch schon. allerdings mit einer for-Schleife.

Aus Auf- und Zuklappen funktioniert mit fullcollapse.

Jetzt kann ich den Fokus aber nicht mehr auf die Level 1 und Level 2 setzen.

Es werden beim Klick ja immer die Programmzeilen zum Auf- und Zuklappen abgearbeitet. Der Fokus steht dann am Ende auf dem Level 0.

Wie gesagt, ich bring's einfach nicht richtig hin.

Vielleicht hast du ja noch einen Tipp, wie ich den Fokus auf die "Untereinträge" bringe.

danke.

Josef

josefkoller 8. Nov 2012 20:02

AW: Treeview nur den geklickten Node expandieren
 
Hallo,

[QUOTE=shmia;1190416]
Zitat:

Zitat von josefkoller (Beitrag 1190411)
Die Lösung des Problems scheint so einfach zu sein

Delphi-Quellcode:
property AutoExpand: Boolean;
Hmmh.... naja. Es wird damit halt beim Klick nicht alles aufgeklappt.

Es kommt nur Level 1, Level 2 bleibt zu.

Weißt du vielleicht auch noch, wie ich alles aufgeklappt bekomme?

Wie geschrieben folgender Aufbau:

Adresse (Level 0)
|-> Bestellungen (Level 1)
|-> Artikel 1 (Level 2) <----- das bleibt zu.
|-> Artikel 2 (Level 2) <----- das bleibt zu.

usw.

Danke

Josef

Steku 8. Nov 2012 21:37

AW: Treeview nur den geklickten Node expandieren
 
Guten Abend,

vielleicht kommst du so ein bisschen weiter, oder kannst es
noch etwas ausbauen...Im OnClick deines TreeViews
mal etwas in diese Richtung probieren (Ungetestet)...

Gruß
Steku

Delphi-Quellcode:
procedure DeineForm.DeinTreeViewClick(Sender: TObject);
var KlickedNode, StartNode, ParentNode: TTreeNode;
begin
   StartNode := nil;
   KlickedNode := nil;
   ParentNode := nil;

   StartNode  := DeinTreeView.Items.GetFirstNode;
   KlickedNode := DeinTreeView.Selected;
   ParentNode := KlickedNode.GetPrev;

   if (KlickedNode.Level = 1) then
     begin
       while StartNode <> nil do
         begin
           if StartNode.Level = 0 then
             begin
                StartNode.Collapse(False);
             end;

             StartNode := StartNode.GetNext;
          end;

          ParentNode.Expand(True);
      end;
end;

josefkoller 8. Nov 2012 23:25

AW: Treeview nur den geklickten Node expandieren
 
Hi,

Danke für den Denkanstoß.

So funktioniert es jetzt bei mir einigermaßen:

Delphi-Quellcode:
procedure .........click(sender:TObject);
var
   KlickedNode: TTreeNode;
begin
   KlickedNode := nil;

   KlickedNode := TV.Selected;

   TV.FullCollapse; //alles wird geschlossen


   if KlickedNode.level <> NULL then begin
      KlickedNode.Selected:=true;
      KlickedNode.Expand(true);
   end;
Es ist immer noch nicht ganz das, was ich will.

Damit wird beim Klick auf Level 0 alles aufgeklappt, was darunter steht. Soweit ist es so wie es sein soll.

Klickt man dann aber auf einen Eintrag Level 1, dann wird nur dieser geklickte Level 1 Eintrag mit seinen Level 2 Einträgen expandiert.

Die anderen Level 1 Einträge werden collapsed.

Aber was soll's. Ich denk, ich laß es so.

danke nochmal.

Ciao

Josef


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:24 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