Delphi-PRAXiS
Seite 2 von 3     12 3      

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 Node eindeutig identifizieren, JvPageListTreeView (https://www.delphipraxis.net/126434-node-eindeutig-identifizieren-jvpagelisttreeview.html)

haentschman 24. Dez 2008 17:02

Re: Node eindeutig identifizieren, JvPageListTreeView
 
Danke für Eure Antworten...

jedesmal bei Aufruf suchen... find ich nicht so prickelnd :( , obwohl das funktionieren würde.

Ich werde mal eine Procedure mit einer case Anweisung probieren welche mir dann auf den entsprechenden Index "umleitet". Bei Änderungen am Tree muß ich dann nur die eine case Anweisung ergänzen / ändern.

bis bald... :hi:

Namenloser 24. Dez 2008 17:22

Re: Node eindeutig identifizieren, JvPageListTreeView
 
Zitat:

Zitat von haentschman
hatte ich auch schon im Sinn, aber nur der TreeView als gesamtes hat einen Tag. Die Nodes selbst haben keine Eigenschaften, welche ich mißbrauchen könnte.

Nutzt diese Komponente etwas anderes als ein TTreeNode für die Nodes? Jedes TTreeNode hat nämlich die Eigenschaft Data, die genau dafür da ist. Da kannst du auch problemlos ein Objekt direkt drin speichern, denn das ist ja eigentlich nichts anderes als ein Pointer.

omata 24. Dez 2008 18:11

Re: Node eindeutig identifizieren, JvPageListTreeView
 
Zitat:

Zitat von RWarnecke
Deine Funktion macht aber igrgendwie nicht das was meine macht.

ja? Meine Tests ergaben genau das selbe Verhalten. Wo ist denn dort ein Unterschied in der Funktionalität?

RWarnecke 24. Dez 2008 18:22

Re: Node eindeutig identifizieren, JvPageListTreeView
 
Aus der Online-Hilfe zu GetNextSibling:
Returns the next node in the tree view at the same level as the calling node.


Ich gehe Anhand der Anzahl der Einträge jeden Eintrag durch.

omata 24. Dez 2008 18:44

Re: Node eindeutig identifizieren, JvPageListTreeView
 
Zitat:

Zitat von RWarnecke
Ich gehe Anhand der Anzahl der Einträge jeden Eintrag durch.

Nichts anderes macht getNextSibling, siehe dazu auch GetFirstChild.

haentschman 24. Dez 2008 19:16

Re: Node eindeutig identifizieren, JvPageListTreeView
 
Ich habe das "Problemchen" zwar schon im Griff aber mich würde das trotzdem interressieren... :wink:
Zitat:

Jedes TTreeNode hat nämlich die Eigenschaft Data, die genau dafür da ist. Da kannst du auch problemlos ein Objekt direkt drin speichern
ein paar Fragen dazu:
:?: was für ein Objekt würdest du dort hinterlegen ?
:?: wie würdest du über das Objekt den entsprechenden Node per Quellcode selektieren ?

:hi:

Namenloser 24. Dez 2008 20:34

Re: Node eindeutig identifizieren, JvPageListTreeView
 
Zitat:

Zitat von haentschman
ein paar Fragen dazu:
:?: was für ein Objekt würdest du dort hinterlegen ?

Das hängt natürlich davon ab, was für eine Struktur du auf dem Baum abbildest. Speicher das Objekt ab, das in der Struktur dem Knoten entspricht.

Zitat:

:?: wie würdest du über das Objekt den entsprechenden Node per Quellcode selektieren ?
Kommt darauf an, ob der Knoten nach der Umsortierung immer noch der gleiche ist, er also ncith zwischenzeitlich freigegeben wird o.ä. Wenn ja, würde ich einfach in dem Datenobjekt wiederum eine Referenz auf den Knoten abspeichern. Wenn nicht, bleibt wohl wirklich nichts anderes übrig, als den ganzen Baum per Schleife durchzugehen und den Knoten zu suchen.

haentschman 24. Dez 2008 20:52

Re: Node eindeutig identifizieren, JvPageListTreeView
 
...nun ja, wenn ich mal viel Zeit habe. :P
...ich habe das nun so gelöst:
Delphi-Quellcode:
procedure TDMallgemein.AufrufEinstellungen(Seite: Integer);
var TempIndex: Integer;
begin
  case Seite of
    1: TempIndex:= 0; //Allgemein
    2: TempIndex:= 1; //Anlagenschema
    3: TempIndex:= 8; //Filterart
    4: TempIndex:= 9; //Filtergröße
    5: TempIndex:= 10; //Filterqualität
    6: TempIndex:= 2; //Anschlüsse
    7: TempIndex:= 3; //Bezeichnungen Technische Daten
    8: TempIndex:= 17; //Terminplaner
    9: TempIndex:= 7; //externe Formulare
    10: TempIndex:= 5; //Drucken
    11: TempIndex:= 18; //Vorlagen Tätigkeiten
    12: TempIndex:= 15; //Nummernkreise
    13: TempIndex:= 14; //Monteure
    14: TempIndex:= 13; //Lieferanten
    15: TempIndex:= 11; //Hersteller
    16: TempIndex:= 6; //Einheiten
    17: TempIndex:= 19; //Wartungsart
    18: TempIndex:= 16; //Serviceart
    19: TempIndex:= 12; //Kältemittel
    20: TempIndex:= 4; //Brandklassen
  end;
  FEinstellungen.JvPageListTreeView1.Items[TempIndex].Selected:= True;
end;
- die Seite bleibt gleich
- nach Hinzufügen einer Einstellung per Quellcode (grundsätzlich manuell) brauche ich nur einmal den TempIndex anzupassen, da alle Aufrufe die Seite wählen.
- eigentlich eine einfache Lösung. Zwar nicht ganz automatisch, aber ich habe die Änderungen nur an einer Stelle und nicht quer Beet durch die Unit´s.

Trotzdem Danke und noch einen schönen Tag... :P

alzaimar 24. Dez 2008 21:00

Re: Node eindeutig identifizieren, JvPageListTreeView
 
Du hast also einen Baum, deren Knotenreihenfolge nicht eindeutig ist. Und du willst die Knoten irgendwie eindeutig identifizieren. Die 'Data'-Eigenschaft wurde schon genannt. Dort kommt eine eindeutige ID rein, die Du einmalig vergibst. Über die ID kannst Du den Knoten nun eindeutig identifizieren. Das man danach suchen muss, ist doch vollkommen egal, denn die paar Mikrosekunden merkt man eh nicht.

Wenn Dir das nicht passt, dann pflege eine zweite unsortierte Liste, in die die Knoten stehen. Der Index in dieser Liste (oder Array) ist dann deine ID. Wenn nun ein Knoten hinzukommt, wird dieser ans Ende der Liste gepackt und bekommt dadurch wieder eine eindeutige ID (Index in die Liste).

Zugriff über 'KnotenListe[IdxAllgemeineEinstellungen]'.

haentschman 24. Dez 2008 22:37

Re: Node eindeutig identifizieren, JvPageListTreeView
 
hmmm... irgendwie habe ich das Gefühl daß wir uns mißverstehen.
Zitat:

Die 'Data'-Eigenschaft wurde schon genannt. Dort kommt eine eindeutige ID rein, die Du einmalig vergibst.
...dümmlich ist nur, daß man an die Data Eigenschaft nur dran kommt, wenn man den Index des Knotens kennt.
Delphi-Quellcode:
JvPageListTreeView.Items.Item[Index].Data
- wenn ich mit der Maus oder mit der Tastatur durch den Tree navigiere habe ich zu jeder Zeit den NODE, dessen Index und andere Eigenschaften ( wie Data) verfügbar.
- da ich aber ohne Tastatur und Maus einen bestimmten Knoten selektieren muß und der Index "eigentlich" nicht bekannt bzw. durch die Sortierung nicht eindeutig ist suchte ich nach einer anderen Möglichkeit der Selektierung.

Mehrere Varianten kommen wie genannt in Frage:
- eine 2. Liste entsprechend mitführen
- meine Variante mit der case Anweisung
- jedesmal den gesamten Tree nach dem Text durchsuchen und den Node oder dessen Index auswerten.

Fazit:
- nach Text suchen fand ich auch zu unflexibel, wenn sich die Texte im Tree mal ändern sollten.
- die case Anweisung fand ich nach meiner Überlegung am einfachsten zu pflegen bzw. anzupassen, da die Änderungen an einer Stelle im Quelltext erfolgen.

...alle Klarheiten beseitigt ? :P

Danke für Eure Mithilfe.

:hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 Uhr.
Seite 2 von 3     12 3      

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