Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Treeview-Ast absprechen (https://www.delphipraxis.net/181200-treeview-ast-absprechen.html)

Pfl 24. Jul 2014 13:42

Treeview-Ast absprechen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, DP,

ich bin ziemlich verzweifelt :-( , da ich mit dem sch... TreeView nicht weiterkomme. Ich möchteb dafür sorgen, dass automatisch bei einer onclick-Aktion auf ein Button ein Unterast an einer bestimmten Stelle angefügt wird; ferner soll dieser Stand auch noch bei Programmstart erhalten bleiben.

Ich weiß desweiteren nicht, wie ich den Baum dazu bringe, auf den Klick eines ganz bestimmten Astes zu reagieren (. Anhang). :evil:

INFO : Der Unterast soll als Kind eines bereits vorhandenen Kindes angefügt werden (Als Unterast von Aktive, bzw. inaktive Lizenzen).

Bitte um dringende Hilfe !!!

Sherlock 24. Jul 2014 15:03

AW: Treeview-Ast absprechen
 
Die Hilfe sollte eigentlich genug zur Lösung beisteuern können.
Das ganze Ding heisst Delphi-Referenz durchsuchenTTreeView, jeder Knoten heisst Delphi-Referenz durchsuchenTTreeNode
Welcher Teil des Baumes wurde angeklickt -> Im (Beispielsweise) Klickereignis Tree.Selected abfragen
Wie füge ich einen neuen Knoten hinzu -> Node.Addchild

Sherlock

Pfl 24. Jul 2014 20:42

AW: Treeview-Ast absprechen
 
Das hilft mir kaum weiter; ich brauche Quellcodebeispiele, um das zu verstehen, oder eine andere Infomation, wie ich herausfinden kann, welcher Index des Baumes (Ast) geklickt wurde.

Sir Rufo 24. Jul 2014 21:17

AW: Treeview-Ast absprechen
 
Zitat:

Zitat von Pfl (Beitrag 1266590)
Das hilft mir kaum weiter; ich brauche Quellcodebeispiele, um das zu verstehen, oder eine andere Infomation, wie ich herausfinden kann, welcher Index des Baumes (Ast) geklickt wurde.

Soll das wirklich im TreeView auftauchen?

Pfl 24. Jul 2014 21:34

AW: Treeview-Ast absprechen
 
Falls du die Lizenzen meinst, dann ja

Sir Rufo 24. Jul 2014 21:56

AW: Treeview-Ast absprechen
 
Insgesamt denke ich mir, du gehst die Sache von der falschen Seite an.

Denke nicht daran, wie du da etwas in einem TreeView bekommst, sondern überlege, wie die deine Datenstruktur als Baum-Struktur aufbaust. Die Anzeige im TreeView kommt erst danach.

Nehmen wir uns mal folgende Klasse
Delphi-Quellcode:
TDataTreeNode = class abstract
private
  FCaption : string;
  FChilds : TList<TDataTreeNode>;
protected
  function GetCaption : string; virtual;
  function GetContext : TObject; virtual;
public
  constructor Create( const Caption : string );
  destructor Destroy; override;
published
  property Caption : string read GetCaption;
  property Childs : TList<TDataTreeNode> read FChilds;
  property Context : TObject read GetContext;
end;

constructor TDataTreeNode.Create( const Caption : string );
begin
  inherited Create;
  FCaption := Caption;
  FChilds := TObjectList<TDataTreeNode>.Create( True );
end;

destructor TDataTreeNode.Destroy;
begin
  FChilds.Free;
  inherited;
end;

function TDataTreeNode.GetCaption : string;
begin
  Result := FCaption;
end;

function TDataTreeNode.GetContext : TObject;
begin
  Result := nil;
end;
Jetzt benötigst du z.B. einen Zweig für die Verwaltungs-Daten
Delphi-Quellcode:
TVerwaltungNode = class( TDataTreeNode )
private
  FVerwaltung : Tierhaltung;
protected
  function GetContext : TObject; override;
public
  constructor Create( Verwaltung : TVerwaltung );
end;

constructor Create( Verwaltung : TVerwaltung );
begin
  inherited Create( 'Verwaltung' );
  FVerwaltung := Verwaltung;
  Childs.Add( TLizenzenNode.Create( 'Aktive Lizenzen', Verwaltung.AktiveLizenzen ) );
  Childs.Add( TLizenzenNode.Create( 'Lizenzen (inaktiv)', Verwaltung.InaktiveLizenzen ) );
end;

function TVerwaltungNode.GetContext : TObject;
begin
  Result := FVerwaltung;
end;
und dazu eben passend
Delphi-Quellcode:
TLizenzenNode = class( TDataTreeNode )
private
  FLizenzen : TList<TLizenz>;
public
  constructor Create( Caption : string; Lizenzen : TList<TLizenzen> );
end;

constructor TLizenzenNode.Create( Caption : string; Lizenzen : TList<TLizenz> );
var
  LLizenz : TLizenz;
begin
  constructor Create( Caption );
  for LLizenz in TLizenz do
    Childs.Add( TLizenzNode.Create( LLizenz ) );
end;
und zu guter letzt noch
Delphi-Quellcode:
TLizenzNode = class( TDataTreeNode )
private
  FLizenz : TLizenz;
public
  constructor Create( Lizenz : TLizenz );
end;

constructor Create( Lizenz : TLizenz );
begin
  inherited Create( Lizenz.Nummer );
  FLizenz := Lizenz;
end;
Das wäre schon mal die grobe Richtung. Wenn du jedem Node jetzt auch noch einen Kontext verpasst, dann kannst du anhand des Kontexts auch noch eine passendes Frame/Formular erzeugen und anzeigen.

Den Baum im TreeView kannst du jetzt mit diesen Objekten aufbauen, indem du die Caption und die Childs abfragst.

(Umgetestet und frei Hand heruntergetippt. Es fehlt auf jeden Fall noch die Benachrichtigung bei Veränderungen innerhalb der Objekte, an die sich die Form dranhängen kann)

Pfl 24. Jul 2014 23:40

AW: Treeview-Ast absprechen
 
Danke für Deine Mühe ;-)


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