Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#2
  Alt 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.
  Mit Zitat antworten Zitat