Einen wunderschönen guten Morgen zusammen,
so nach einer langen Nacht und viel Geduld, habe ich meine Problem jetzt gelößt. Die Lösung habe ich jetzt über ein Record gemacht und die Daten über folgende Ausführung zugewiesen. Ich bin mir allerdings nicht sicher, ob es so gut gelößt ist,das ich nicht irgendwo Probleme bekomme.
Die Lösung funktioniert zwar, aber vieleicht kann ja mal jemand von Euch sich den Weg dazu ansehen.
Hier meine Lösung...
Delphi-Quellcode:
type pNodeData = ^rNodeData;
rNodeData = record
Objekt : String;
Zentrale : String;
IPPort : String;
COMPort : String;
end;
...
implementation
....
function GetLocalIPs(const Lines:TStrings):Boolean;
type
PPInAddr= ^PInAddr;
var
wsaData: TWSAData;
HostInfo: PHostEnt;
HostName: Array[0..255] of Char;
Addr: PPInAddr;
begin
Result:=False;
Lines.Clear;
if WSAStartup($0102, wsaData)=0 then
try
if gethostname(HostName, SizeOf(HostName)) = 0 then Begin
HostInfo:= gethostbyname(HostName);
if HostInfo<>nil then Begin
Addr:=Pointer(HostInfo^.h_addr_list);
if (Addr<>nil) AND (Addr^<>nil) then
Repeat
Lines.Add(StrPas(inet_ntoa(Addr^^)));
inc(Addr);
Until Addr^=nil;
end;
end;
Result:=True;
finally
WSACleanup;
end;
end;
...
procedure TForm1.Create;
begin
...
VSTSystemCreate;
...
end;
procedure TForm1.VSTSystemCreate;
var
pNode :pVirtualNode;
begin
VST.Clear;
VSTSystem.BeginUpdate;
pNode := VSTSystem.AddChild(nil);
pNode := VSTSystem.AddChild(pNode);
VSTSystem.AddChild(pNode);
VSTSystem.AddChild(pNode);
VSTSystem.EndUpdate;
end;
procedure TForm1.VSTSystemFreeNode(Sender: TBaseVirtualTree;
Node: PVirtualNode);
var
pdata : pNodeData;
begin
pdata := Sender.GetNodeData(Node);
if Assigned(pdata) then
begin
pdata.Objekt := '';
pdata.Zentrale := '';
pdata.COMPort := '';
pdata.IPPort := '';
end;
end;
procedure TForm1.VSTSystemGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var
Level : Integer;
pdata : pNodeData;
begin
pdata := Sender.GetNodeData(Node);
Level := VSTSystem.GetNodeLevel(Node);
if Level = 0 then
CellText := pdata.Objekt;
if Level = 1 then
CellText := pdata.Zentrale;
if Level = 2 then
begin
if Node.Index = 0 then
CellText := pdata.IPPort
else
CellText := pdata.COMPort;
end;
end;
procedure TForm1.VSTSystemInitNode(Sender: TBaseVirtualTree; ParentNode,
Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
pdata : pNodeData;
BaudRate : String;
Stopbit : String;
Databit : String;
IPLokal : TStringList;
begin
DM_PS.ConPSConfig.Connect;
DM_PS.Qry_VSTSystemCreate.Open;
pdata := Sender.GetNodeData(Node);
pdata.Objekt := DM_PS.Qry_VSTSystemCreate.FieldByName('KUNDE').AsString;
case DM_PS.Qry_VSTSystemCreate.FieldByName('ZENTRALENTYP').AsInteger of
0: pdata.Zentrale := 'NOVAR HB/MB 24';
1: pdata.Zentrale := 'NOVAR HB/MB 48';
2: pdata.Zentrale := 'NOVAR MB100';
3: pdata.Zentrale := 'NOVAR MB256';
4: pdata.Zentrale := 'BOSCH UEZ2000';
5: pdata.Zentrale := 'NOVAR BMC 1024';
6: pdata.Zentrale := 'ESSER IQ8 Control';
7: pdata.Zentrale := 'SONSTIGE';
end;
BaudRate := IntToStr(ComPort1.CustomBaudRate);
Stopbit := StopBitsToStr(ComPort1.StopBits);
Databit := DataBitsToStr(ComPort1.DataBits);
pdata.COMPort := ComPort1.Port+', '+BaudRate+', '+Stopbit+', '+Databit;
IPLokal := TStringList.Create;
GetLocalIPs(IPLokal);
pdata.IPPort := IPLokal.Text;
IPLokal.Free;
DM_PS.Qry_VSTSystemCreate.Close;
end;
Danke schon mal,
Gruß
Jens