unit Unit1;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs, VirtualTrees;
type
TOCustomers =
class(TObject)
private
FID: Integer;
// ID
FESID: Integer;
// ESID
FName:
string;
// Name des Kunden
FOrt:
string;
// Ort des Kunden
FStraße:
string;
// Straße des Kunden
FAnsprechpartnerId: Integer;
// Ansprechpartnernummer
FAnsprechpartner:
string;
// Ansprechpartner
FAnsPosition:
string;
// Position/Stellung
FEMail:
string;
// EMail des Ansprechpartners
FTel1:
string;
// Telefonnummer 1 des Ansprechpartners
FTel2:
string;
// Telefonnummer 2 des Ansprechpartners
FFax:
string;
// Faxnummer des Ansprechpartners
FBemerkung:
string;
// Kunden Zusatzinformation
public
property Kunden_Kundennummer: Integer
read FID
write FID;
property Kunden_ESKundennummer: Integer
read FESID
write FESID;
property Kunden_Kundenname:
string read FName
write FName;
property Kunden_Ort:
string read FOrt
write FOrt;
property Kunden_Straße:
string read FStraße
write FStraße;
property Kunden_Bemerkung:
string read FBemerkung
write FBemerkung;
property Ansprechpartner_Id: Integer
read FAnsprechpartnerId
write FAnsprechpartnerId;
property Ansprechpartner_Name:
string read FAnsprechpartner
write FAnsprechpartner;
property Ansprechpartner_Position:
string read FAnsPosition
write FAnsPosition;
property Ansprechpartner_EMail:
string read FEMail
write FEMail;
property Ansprechpartner_Telefon1:
string read FTel1
write FTel1;
property Ansprechpartner_Telefon2:
string read FTel2
write FTel2;
property Ansprechpartner_Fax:
string read FFax
write FFax;
end;
TOBuilding =
class
end;
TOSystems =
class
end;
TRKundenDaten =
record
FKundedaten: TOCustomers;
FObjektdaten: TOBuilding;
FSystemdaten: TOSystems;
end;
PRKundenDaten = ^TRKundenDaten;
type
TForm1 =
class(TForm)
vstKunden: TVirtualStringTree;
procedure FormCreate(Sender: TObject);
procedure VstKundenFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
I : Integer;
CustomerNode, BuildingNode, SystemNode: PVirtualNode;
Daten: PRKundenDaten;
begin
vstKunden.BeginUpdate;
try
vstKunden.Clear;
CustomerNode := vstKunden.AddChild(
nil);
vstKunden.InvalidateNode(CustomerNode);
vstKunden.NodeDataSize := SizeOf(TRKundenDaten);
for I := 0
to 10
do
begin
BuildingNode := vstKunden.AddChild(
nil);
Daten := vstKunden.GetNodeData(CustomerNode);
// das folgende geht anstandslos
Daten^.FKundedaten := TOCustomers.Create;
Daten^.FObjektdaten := TOBuilding.Create;
Daten^.FSystemdaten := TOSystems.Create;
end;
vstKunden.SortTree(0, sdAscending, True);
finally
vstKunden.EndUpdate;
end;
end;
procedure TForm1.VstKundenFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
var
Kunden_Daten: PRKundenDaten;
begin
case vstKunden.GetNodeLevel(Node)
of
0:
begin
Kunden_Daten := Sender.GetNodeData(Node);
Finalize(Kunden_Daten^);
end;
end;
end;
end.