Einzelnen Beitrag anzeigen

Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#22

Re: Problem mit Pointer beim VirtualStringTree

  Alt 6. Dez 2009, 12:24
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
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat