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 Treeviewknoten mit Listviewinhalt verknüpfen (https://www.delphipraxis.net/575-treeviewknoten-mit-listviewinhalt-verknuepfen.html)

Luckie 10. Aug 2002 05:35


Treeviewknoten mit Listviewinhalt verknüpfen
 
Hallo.

Ich schreibe gerade eine Terminverwaltung. Diese ist wie folgt aufgebaut:
In einem Treeview stehen die Terminkategorien (privat, geschäftlich, usw.) und in einem Listview werden die in dieser Kategorie vorhandenen Termine angezeigt. So soll es mal aussehen. Nur habe ich jetzt das Problem, wie bekomme ich es hin, dass er mir auch nur die Termine anzeigt, die zu dieser Kategorie gehören. Ich muß also einen Knoten des Treeviews mit dem Inhalt eines Listviews verknüpfen.

MathiasSimmack 10. Aug 2002 06:45

Hi Luckie.

Du könntest einen Blick in den Quellcode meines YAAM werfen (s. OpenSource). Da habe ich das gemacht, um im TreeView sowohl die Registry-Autostarts als auch die NT-Dienste anzuzeigen. Die Lösung ist jedenfalls die "Data"-Membervariable:
Code:
[b]type[/b]
  PTreeViewObj = ^TTreeViewObj;
  TTreeViewObj =
    [b]packed[/b] [b]record[/b]
      Termin : [b]string[/b];
    [b]end[/b];

[color=#000080][i]{ ... }[/i][/color]

[b]var[/b]
  p : TreeViewObj;
  tn : TTreeNode;

[color=#000080][i]{ ... }[/i][/color]

p^.Termin := 'Blumen kaufen, & Pauschalentschuldigung aussprechen';
tn       := TreeView.Items.AddObject([b]nil[/b],'Heute',p);
Und die Anzeige habe ich bei YAAM im "OnChange"-Event des TreeViews gemacht:
Code:
[b]var[/b]
  li : TListItem;

[color=#000080][i]{ ... }[/i][/color]

[b]with[/b] ListView1,Items [b]do[/b]
  [b]begin[/b]
    BeginUpdate;
    Clear;

    [b]if[/b](Node.Data <> [b]nil[/b]) [b]then[/b]
      [b]begin[/b]
        li := Add;
        li.Caption := PTreeViewObj(Node.Data)^.Termin;
      [b]end[/b];

    EndUpdate;
  [b]end[/b];
Da ich aber auch mehrere Einträge anzeigen lassen wollte/musste, habe ich in das o.g. Objekt zwei Knoten eingefügt, um mich quasi durch die Kette zu hangeln:
Code:
[b]type[/b]
  PTreeViewObj = ^TTreeViewObj;
  TTreeViewObj =
    [b]packed[/b] [b]record[/b]
      [color=#000080][i]{ ... }[/i][/color]
      left,
      right : PTreeViewObj;
    [b]end[/b];
Das heißt, du könntest einen Eintrag auslesen, dann setzt du den Pointer auf den Wert von rechts, liest den nächsten Eintrag ... und wiederholst das solange, bis "right" nil ist.

Wie gesagt: in dem Autostartmanager findest du ein ausführliches Beispiel dafür. Auch, wie man diese Kette aufbaut und beim Beenden des Programms korrekt freigibt, damit keine Reste bleiben.

Gruß,
Mathias.


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