![]() |
TTreeView auslesen und Werte von Nodes in Listbox eintragen.
Guten Abend,
der Unglueckliche Lucius meldet sich wieder :gruebel: Bezueglich dieses Thema ![]() 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:
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. :coder:
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; Kann mir da einer bitte helfen? Vielen Dank, Lucius. |
Re: TTreeView auslesen und Werte von Nodes in Listbox eintra
Hat keiner ein Vorschlag?
|
Re: TTreeView auslesen und Werte von Nodes in Listbox eintra
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:
So oder ähnlich könnte es aussehen, testen konnte ich aber nicht.
// ...
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; // ... Freundliche Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz