AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi TTreeView auslesen und Werte von Nodes in Listbox eintragen.
Thema durchsuchen
Ansicht
Themen-Optionen

TTreeView auslesen und Werte von Nodes in Listbox eintragen.

Ein Thema von lucius · begonnen am 17. Apr 2007 · letzter Beitrag vom 18. Apr 2007
Antwort Antwort
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#1

TTreeView auslesen und Werte von Nodes in Listbox eintragen.

  Alt 17. Apr 2007, 22:04
Guten Abend,

der Unglueckliche Lucius meldet sich wieder

Bezueglich dieses Thema XML ist es mir jetzt gelungen die XML-Datei(2MB) recht zuegig ein zu lesen in einer TreeView.
Im TreeView werden verschiedene Nodes angeben wovon manche, Daten enthalten die in einer Listbox angegeben werden beim anklicken.
Node: Daten:
file |------------ poster (Listbox.ItemIndex[0])
|------------ date (Listbox.ItemIndex[1])
|------------ subject(Listbox.ItemIndex[2])

Jetzt moechte Ich gerne dass aus der ganzen TreeView nur die Daten vom Node (file) mit den Daten 'subject' in der Listbox angeben werden, also muesste 'poster' und 'date' geloescht werden.
Spaeter brauchte ich auf dem selben Wege auch die Daten 'segment' vom Node (segments) und einmalig die Daten 'group' vom Node (groups).
Delphi-Quellcode:
procedure TfrmMain.DrawXML( Data : Pointer = nil );
var
  p : Pointer;
begin
  p := Data;
  if (tvXML.Selected <> nil) and
     (p = nil) then
    p := tvXML.Selected.Data;
  tvXML.Items.Clear;
  tvXML.Items.BeginUpdate;
  p := DrawXMLItem(XML.Root, nil, p);
  tvXML.Items.EndUpdate;
  tvXML.FullExpand;
  if p = nil then
    tvXML.Selected := tvXML.Items[0]
  else
    tvXML.Selected := p;
end;

function TfrmMain.DrawXMLItem(XMLItem: TXMLItem; Node: TTreeNode; Data : Pointer) : Pointer;
var
  n : TTreeNode;
  i : Integer;
  p : Pointer;
begin
  Result := nil;
  p := nil;
  n := tvXML.Items.AddChild(Node, XMLItem.Name);
  n.Data := XMLItem;
  if Integer(n.Data) = Integer(Data) then
    p := n;

  for i := 0 to XMLItem.SubItemCount -1 do
    if p = nil then
      p := DrawXMLItem(XMLItem.SubItems[i], n, Data)
    else
      DrawXMLItem(XMLItem.SubItems[i], n, Data);

  if p <> nil then
    Result := p;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  HistoryList := TStringList.Create;
  XML.CrLfInAsString := btnCrLf.Down;
  FileName := '';
  XML.Clear;
  if FileExists(ParamStr(1)) then
    begin
      FileName := ParamStr(1);
      XML.LoadFromFile(FileName);
    end;
  DrawXML;
end;

procedure TfrmMain.tvXMLChange(Sender: TObject; Node: TTreeNode);
var
  xmlItem : TXMLItem;
begin
  DoChangeEvents := false;
  try
    btnNewNode.Enabled := Assigned(Node);
    btnDeleteNode.Enabled := Assigned(Node) and (Node.Level > 0);
    edItemTitle.ReadOnly := not Assigned(Node);
    edItemValue.ReadOnly := not Assigned(Node);
    btnNewProperty.Enabled := Assigned(Node);
    btnDeleteProperty.Enabled := false;
    btnMoveDown.Enabled := btnDeleteNode.Enabled;
    btnMoveUp.Enabled := btnDeleteNode.Enabled;

    if Assigned(Node) then
      begin
        xmlItem := Node.Data;
        edItemTitle.Text := xmlItem.Name;
        edItemValue.Text := xmlItem.Text;
        lbItemParamaters.Items.Assign(xmlItem.Params);
      end;
  finally
    DoChangeEvents := true;
  end;
end;
Ich weiss dass ganze ging vielleicht viel besser mit einer ListView was Ich auch eigentlich realisieren moechte, aber Ich kriege es auf normalen Wege einfach nicht hin als Newbie und der Tag war so kurz Heute.
Kann mir da einer bitte helfen?

Vielen Dank,

Lucius.
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: TTreeView auslesen und Werte von Nodes in Listbox eintra

  Alt 18. Apr 2007, 08:07
Hat keiner ein Vorschlag?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: TTreeView auslesen und Werte von Nodes in Listbox eintra

  Alt 18. Apr 2007, 13:00
Hallo unglücklicher Lucius,

welche XML-Komponenten verwendest du?

Ich würde die beiden Attribute poster und date nicht hinterher rausschmeißen, sondern gar nicht erst in die ListBox schreiben. Dazu musst du in der Routine tvXMLChange() ein paar Änderungen machen.

Delphi-Quellcode:
// ...
  if Assigned(Node) then
  begin
    xmlItem := Node.Data;
    edItemTitle.Text := xmlItem.Name;
    edItemValue.Text := xmlItem.Text;
    lbItemParameters.Clear;
    lbItemParamaters.Items.Add(xmlItem.Params[xmlItem.Params.IndexOfName('subject')]);
  end;
// ...
So oder ähnlich könnte es aussehen, testen konnte ich aber nicht.

Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


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 13: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