AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TTreeNode.Data verwenden

Ein Thema von Chewie · begonnen am 26. Apr 2003 · letzter Beitrag vom 26. Apr 2003
Antwort Antwort
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#1

TTreeNode.Data verwenden

  Alt 26. Apr 2003, 11:59
Ich versuche gerade, ein TStrings-Objekt in der Data-Eigenschaft eines TTreeNode zu speichern. Der Sinn ist, dass beim Selektieren des TreeNodes im TTreeView das TStrings-Objekt in einer Listbox angezeigt werden soll. Die Daten sollen erst ins TreeNode geschrieben werden, nachdem es erstellt wurde, also scheidet AddObject aus. Was ich jetzt versucht habe, ist abzufragen, ob bereits Datenn zu dem TreeNode gehören. Wenn nein, werden die Daten dem TreeNode zugeordnet, wenn ja, werden diese Daten in der Listbox dargestellt. Leider hab ich letzteres noch nicht hingekriegt, und ersteres kann ich aus dem selben Grund schlecht überprüfen.
Folgenden Code hab ich:
Delphi-Quellcode:
procedure TMainForm.files_ausgabeChange(Sender: TObject; Node: TTreeNode);
var
  UsedFunctions: TStringList;
type
  PStrings = ^TStrings;
begin
  //nur anfangen, falls Element auf der letzten Ebene
  if not Node.HasChildren then
  begin
    //falls keine Daten gespeichert sind
    if Node.Data = nil then
    begin
      //GetUsedFunctions liefert TStringList-Wert
      UsedFunctions := GetUsedFunctions(Node.Parent.Text,Node.Text,DefFunctionsList);
      Node.Data := @UsedFunctions;
      //used_ausgabe ist eine ListBox
      used_ausgabe.Items.AddStrings(UsedFunctions);
    end
    //die Daten sollen ausgelesen werden -> hier haperts
    else used_ausgabe.Items.AddStrings(TStrings(Node.Data^).Strings); //<--
  end
  else used_ausgabe.Clear;
end;
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 26. Apr 2003, 12:36
Moin Chewie,

hier mal ein Muster (Treeview, ListView mit einer Spalte, Style=vsReport)

Delphi-Quellcode:
procedure TfrmMAIN.TreeView1Click(Sender: TObject);

  function GetUsedFunctions : TStringList;
  begin
    Result := TStringList.Create;
    Result.Add('Zeile1');
    Result.Add('Zeile2');
  end;

var
  i : integer;

begin
  if TreeView1.Selected = nil then exit;
  if TreeView1.Selected.HasChildren then exit;
  if TreeView1.Selected.Data = nil then
  begin
    TreeView1.Selected.Data := GetUsedFunctions;
  end;
  ListView1.Items.BeginUpdate;
  try
    ListView1.Items.Clear;
    for i := 0 to TStrings(TreeView1.Selected.Data).Count-1 do
    begin
      ListView1.Items.Add;
      ListView1.Items[ListView1.Items.Count-1].Caption := TStrings(TreeView1.Selected.Data)[i];
    end;
  finally
    ListView1.Items.EndUpdate;
  end;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#3
  Alt 26. Apr 2003, 13:28
Autsch. Ich meinte TListbox, nicht TListView .
Macht aber nix, ich denke, ich kann damit was anfangen. Danke.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 26. Apr 2003, 14:39
Moin Chewie,

wieso Du

Wenn dann ich

Du hattest ja auch ListBox geschrieben.

Dann eben statt der for Schleife

    ListBox1.Items.AddStrings(TStrings(TreeView1.Selected.Data)); und natürlich ListView1 gegen ListBox1 getauscht.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#5
  Alt 26. Apr 2003, 14:55
Wow

Das iss ja lustig. Na ja, ich hatte deine Antwort gelesen und da du da Listview geschrieben hast, dachte ich, ich hätte auch Listview geschrieben. Aber was solls.

Was ich nur nicht so ganz versteh, ist dass es funktioniert, wenn ich über die Selected-Eigenschaft von dem TreeView gehe, so wie du es geschrieben hast. Wenn ich aber, so wie ich es vorhatte, über die Node-Variable in der onChange-Prozedur gehe, krieg ich nen Compilierfehler.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 26. Apr 2003, 15:48
Moin Chewie,

also wenn ich das so mache geht's auch:

Delphi-Quellcode:
procedure TfrmMAIN.TreeView1Change(Sender: TObject; Node: TTreeNode);

  function GetUsedFunctions : TStringList;
  begin
    Result := TStringList.Create;
    Result.Add('Zeile1');
    Result.Add('Zeile2');
  end;

var
  i : integer;

begin
  if Node = nil then exit;
  if Node.HasChildren then exit;
  if Node.Data = nil then
  begin
    Node.Data := GetUsedFunctions;
  end;
  ListBox1.Items.BeginUpdate;
  try
    ListBox1.Items.Clear;
    ListBox1.Items.AddStrings(TStrings(Node.Data));
  finally
    ListBox1.Items.EndUpdate;
  end;
end;
Welchen Compilierfehler bekommst Du denn?
Ich vermute mal, dass es am ^ liegt.
Das .Strings kannst Du übrigens auch weglassen.

Was Du allerdings nicht weglassen darfst:
Die über Data zugänglichen Stringlisten müssen auch wieder freigegeben werden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#7
  Alt 26. Apr 2003, 20:54
Tja. Läufts einnmal, läufts immer. Ich weiß nicht mehr genau, was ich vorhin geschrieben habe, aber jeztzt geht es auch, wenn ich Node anstelle von TreeView.Selected benutze. Sei's drum.

Resourcen gebb ich natürlich auch wieder frei. Ich in der Doku gelesen, dass man das wieder freigeben muss
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 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