unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, JvSimpleXml, StdCtrls, ComCtrls, JclSimpleXml, Contnrs;
type
TOrdnerSammlung =
class;
TOrdner =
class(TObject)
public
Ordnername,
Icon:
string;
Expanded: Boolean;
Unterordner: TOrdnerSammlung;
constructor Create;
overload;
end;
TOrdnerSammlung =
class(TObjectlist)
function GetItems: TOrdner;
public
property Items: TOrdner
read getItems;
end;
type
TForm1 =
class(TForm)
TreeView1: TTreeView;
XML: TJvSimpleXML;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
public
OrdnerListe: TOrdnerSammlung;
procedure WriteNode(Node: TTreeNode; Liste: TOrdnerSammlung);
procedure ReadInObjects(XMLText: TJclSimpleXMLElem; OrdnerSammlung:
TOrdnerSammlung);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TOrdnerSammlung.GetItems: TOrdner;
begin
end;
constructor TOrdner.Create;
begin
Unterordner := TOrdnersammlung.Create(True);
end;
procedure TForm1.WriteNode(Node: TTreeNode; Liste: TOrdnerSammlung);
var
I: Integer;
newTreeNode: TTreeNode;
begin
if Liste.Count > 0
then
for I := 0
to Liste.Count - 1
do
begin
newTreeNode := TreeView1.Items.AddChild(Node,
TOrdner(Liste[I]).Ordnername);
newTreeNode.ImageIndex := StrToInt(TOrdner(Liste[I]).Icon);
if TOrdner(Liste[I]).Unterordner.Count > 0
then
WriteNode(newTreeNode, TOrdner(Liste[I]).Unterordner);
end;
end;
procedure TForm1.ReadInObjects(XMLText: TJclSimpleXMLElem; OrdnerSammlung:
TOrdnerSammlung);
var
I, J: Integer;
newFolder: TOrdner;
begin
// Wenn die XML-Struktur noch Daten enthält
if XMLText.Items.Count > 0
then
for I := 0
to XMLText.Items.Count - 1
do
begin
// Wenn es sich um einen Ordner handelt
if XMLText.Items[I].
Name = '
Ordner'
then
begin
if XMLText.Items[I].Properties.Count > 0
then
begin
// Neues Ordnerobjekt erstellen
newFolder := TOrdner.Create;
for J := 0
to XMLText.Items[I].Properties.Count - 1
do
begin
// Der Ordnername wird ausgelesen
if XMLText.Items[I].Properties[J].
Name = '
Name'
then
newFolder.Ordnername := XMLText.Items[I].Properties[J].Value;
if XMLText.Items[I].Properties[J].
Name = '
Expanded'
then
if XMLText.Items[I].Properties[J].Value = '
True'
then
newFolder.Expanded := True
else
newFolder.Expanded := False;
if XMLText.Items[I].Properties[J].
Name = '
Icon'
then
newFolder.Icon := XMLText.Items[I].Properties[J].Value;
end;
end;
end;
// Fügt der Liste das Ordnerobjekt hinzu
OrdnerSammlung.Add(TOrdner(newFolder));
// Auf Unterordner prüfen
if XMLText.Items[I].Items.Count > 0
then
// Wenn es sich um einen Ordner handelt
if XMLText.Items[I].
Name = '
Ordner'
then
ReadInObjects(XMLText.Items[I], newFolder.Unterordner);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
XML.LoadFromFile(ExtractFilePath(Application.ExeName) + '
Test.xml');
Ordnerliste := TOrdnerSammlung.Create(True);
ReadInObjects(
XML.Root, Ordnerliste);
Button2.Enabled := True;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
TreeView1.Items[1].DeleteChildren;
WriteNode(TreeView1.Items[1], Ordnerliste);
end;
end.