habe hier mal ein paar code schnipsel zusammengeschrieben wie ich das geamcht habe.
1.) Definition der Daten die ich brauche
Delphi-Quellcode:
TTreeDataClass = class
private
FTestStr1: string;
FDokID: integer;
FKDID: integer;
FICON: integer;
FDOKNR: string;
FMASUCH: string;
FDokDatum: TDate;
FUserInitial: string;
FMandant: integer;
FDokArt: TDokTypen;
FDokKuerzel: string;
published
property TestStr1: string read FTestStr1 write FTestStr1;
property DokID: integer read FDokID write FDokID;
property KDID: integer read FKDID write FKDID;
property ICON: integer read FICON write FICON;
property DokDatum: TDate read FDokDatum write FDokDatum;
property UserInitial: string read FUserInitial write FUserInitial;
property Mandant: integer read FMandant write FMandant;
property DOKNR: string read FDOKNR write FDOKNR;
property MASUCH: string read FMASUCH write FMASUCH;
property DokArt: TDokTypen read FDokArt write FDokArt;
property DokKuerzel: string read FDokKuerzel write FDokKuerzel;
end; //class
PTreeData = ^TTreeData;
TTreeData = record
FObject: TObject;
end;
2. Methode fuer das Hinzufuegen von Nodes
Delphi-Quellcode:
function TFormChildArchiv.AddVSTObject(avst: TCustomVirtualStringTree;
aNode: PVirtualNode; aObject: TObject): PVirtualNode;
var
Data: PTreeData;
begin
Result := avst.AddChild(aNode);
avst.ValidateNode(Result, False);
data := avst.GetNodeData(Result);
data^.FObject := aObject;
end;
3. Füllen der Datenstrukturen mit werten aus der
DB
Delphi-Quellcode:
procedure TFormChildArchiv.BuildTree;
var
TreeObject: TTreeDataClass;
Wurzel: PVirtualNode;
begin
vst.BeginUpdate;
vst.NodeDataSize := SizeOf(TTreeData);
vst.DeleteChildren(vst.RootNode, true);
if markiert(ANGEBOT) then
begin
// Root eintragen
TreeObject := TTreeDataClass.Create;
try
TreeObject.DokArt := ANGEBOT;
TreeObject.DokKuerzel := 'ANG';
TreeObject.TestStr1 := GetDKBEZ(GetEnumName(TypeInfo(TDokTypen),
ord(TreeObject.Dokart))) +
'(' + IntTostr(IB_QryAngebote.RecordCount) + ')';
if IB_QryAngebote.RecordCount > 0 then
TreeObject.Icon := 3
else
TreeObject.Icon := 12;
Wurzel := addvstObject(vst, nil, TreeObject);
// jetzt Detail eintragen
with IB_QryAngebote do
begin
while not Eof do
begin
TreeObject := TTreeDataClass.Create;
try
TreeObject.TestStr1 := FieldByName('KU_SUCH').AsString;
TreeObject.DokID := FieldByName('AK_ID').AsInteger;
TreeObject.KDID := FieldByName('AK_KU_ID').AsInteger;
TreeObject.DokDatum := FieldByName('AK_DATUM').asdate;
TreeObject.UserInitial := FieldByName('USER_INITIAL').asString;
TreeObject.Mandant := FieldByName('AK_MANDANT').AsInteger;
TreeObject.DOKNR := FieldByName('AK_NR').asstring;
// TreeObject.Icon := 17;
addvstObject(vst, Wurzel, TreeObject)
except
TreeObject.free
end; //try
Next;
end; //while
end;
except
TreeObject.free
end; //try
IB_QryAngebote.Close;
end; // if Angebote eintragen
if markiert(ANFRAGE) then
begin
// Root eintragen
TreeObject := TtreeDataClass.Create;
try
TreeObject.dokart := ANFRAGE;
TreeObject.DokKuerzel := 'ANF';
TreeObject.TestStr1 :=
GetDKBEZ(GetEnumName(TypeInfo(TDokTypen),
ord(TreeObject.Dokart))) +
'(' + IntTostr(IB_QryAnfragen.RecordCount) + ')';
if IB_QryAnfragen.RecordCount > 0 then
TreeObject.Icon := 3
else
TreeObject.Icon := 12;
Wurzel := addvstObject(vst, nil, TreeObject);
// jetzt Detail eintragen
with IB_QryAnfragen do
begin
while not Eof do
begin
TreeObject := TTreeDataClass.Create;
try
TreeObject.TestStr1 := FieldByName('KU_SUCH').AsString;
TreeObject.DokID := FieldByName('AN_ID').AsInteger;
TreeObject.KDID := FieldByName('KU_ID').AsInteger;
TreeObject.DokDatum := FieldByName('AN_SERVERDATUM').asdate;
TreeObject.UserInitial := FieldByName('USER_INITIAL').asString;
TreeObject.Mandant := FieldByName('MANDANT_ID').AsInteger;
TreeObject.DOKNR := FieldByName('AN_NR').asstring;
// TreeObject.Icon := 17;
addvstObject(vst, Wurzel, TreeObject);
except
TreeObject.free;
end; //try
Next;
end; // while
end; // with
except
TreeObject.Free
end; //try
IB_QryAnfragen.Close;
end; // if
unter 3 steht noch viel balast das entscheidende fuer die Baumstruktur
ist addvstObject