ďťż

Ładny brzuch

Cześć:) Ślęczałem nad tym cały weekend i naprawdę już nie mam pomysłu, jak to zrobić. Pomóżcie, jestem początkujący i dopiero raczkuję w Delphi. Mam sobie plik.xml zbudowany w ten sposób:

<baza>  <temat>    <tytuł>PC Format</tytuł>    <info>Jakiś tam opis</info>  </temat>  <temat>    <tytuł>Ekspert</tytuł>    <info>Inny Opis</info>  </temat>  <temat>    <tytuł>Chip</tytuł>    <info>Opis będzie</info>  </temat> </baza>

Jak widać jest mało skomlikowana budowa, ale... Kiedy w procedurze FormCreate wczytuje tematy do Listbox`a (Sorted:=True) wszystkie tematy są wczytywane i automatycznie sortowane alfabetycznie. Problemu by nie było gdybym zmienił Sorted:=False w Listbox, ale wtedy byłaby kaszana z tytułami.

procedure TForm1.FormCreate(Sender: TObject); var  i : integer; begin  XML.LoadFromFile('file.xml');  XML.Active:=True;  for i:=0 to XML.DocumentElement.ChildNodes.Count -1 do  Listbox1.Items.Add(XML.DocumentElement.ChildNodes[i].ChildValues['tytuł' ]); end;

Problem pojawia się w procedurze onclick Listboxa. Kiedy klikam na np: PC Format wyskakuje mi opis w Memo: "Opis będzie" zamiast: "Jakiś tam opis", podobnie jest też kiedy wybieram temat Chip, a opis zamiast być: "Opis będzie, to wyskakuje "Jakiś tam opis".

procedure TForm1.ListBox1Click(Sender: TObject); begin  XML.LoadFromFile('file.xml');  XML.Active:=True;  Memo1.Lines.Clear;  Memo1.Lines.Add(XML.DocumentElement.ChildNodes[Listbox1.ItemIndex].ChildValues[ 'opis']); end;

Teraz pytanie: Jak posortować dane w pliku xml, chodzi mi o to "drzewko", które byłoby posortowane przy zapisie wg tytułów z przyporządkowanymi do tytułu odpowiednimi opisami lub też zamiast tego...
Jak przyporządkować indexy z listboxa konkretnym tytułom tak, żeby po kliknięciu tytułu wyświetlał sie odpowiedni opis.



Witaj!

TXMLDocument posiada takie metody jak ChildNodes.FindNode oraz ChildNodes.IndexOf, które powinny pomóc. Ja jednak posłużę się innym sposobem. Właściwość Sorted ListBox'a pozostaw na True. A zadrzenie onclick uzupełnij nastepujaco:

procedure TForm1.ListBox1Click(Sender: TObject); var i: WORD; begin for i:=0 to Pred(XML.DocumentElement.ChildNodes.Count) do begin  if XML.DocumentElement.ChildNodes[i].ChildValues['tytuł'] = ListBox1.Items[ListBox1.ItemIndex] then    Memo1.Lines.Add(XML.DocumentElement.ChildNodes[i].ChildValues['info'] ); end; end;

Pozdrawiam.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •