AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem mit Pointer beim VirtualStringTree

Ein Thema von Jens Hartmann · begonnen am 4. Dez 2009 · letzter Beitrag vom 6. Dez 2009
Antwort Antwort
Seite 3 von 3     123
Benutzerbild von Jens Hartmann
Jens Hartmann

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

Re: Problem mit Pointer beim VirtualStringTree

  Alt 6. Dez 2009, 00:55
Schönen guten Abend nochmal zusammen,

Ich bin jetzt ein Stück weiter, allerdings denke ich das es der falsche Weg ist, und außerdem ist auch noch eine Fehler drin.

Ich habe jetzt einfach mal so zum Test 4 GLOBALE Variablen angelegt, die ich beim CREATE initialisiere und in die GetText Methode einbinde.
Funktioniert auch jetzt genau so wie ich mir das vorstelle (siehe ScreenShot1), bis auf wenn ich eine Ebene über das - Zeichen Expandiere, kann ich diese Ebene nie wieder FullExpanded setzen(siehe Anhang 2).

Außerdem, gefällt mir das mit den GLOBALEN Var. nicht.

hier mal der aktuelle Code...
Delphi-Quellcode:
procedure TForm1.VSTSystemCreate;
var
  pNode :pVirtualNode;
begin
  DM_PS.ConPSConfig.Connect;
  DM_PS.Qry_VSTSystemCreate.Open;
  Objekt := DM_PS.Qry_VSTSystemCreate.FieldByName('KUNDE').AsString;
  case DM_PS.Qry_VSTSystemCreate.FieldByName('ZENTRALENTYP').AsInteger of
        0: Zentrale := 'NOVAR HB/MB 24';
        1: Zentrale := 'NOVAR HB/MB 48';
        2: Zentrale := 'NOVAR MB100';
        3: Zentrale := 'NOVAR MB256';
        4: Zentrale := 'BOSCH UEZ2000';
        5: Zentrale := 'NOVAR BMC 1024';
        6: Zentrale := 'ESSER IQ8 Control';
        7: Zentrale := 'SONSTIGE';
      end;
  COMPort := 'COM 1, 9600,8,1';
  IPPort := '192.168.100.101';
  DM_PS.Qry_VSTSystemCreate.Close;
  
  VSTSystem.BeginUpdate;
  pNode := VSTSystem.AddChild(nil);
  pNode := VSTSystem.AddChild(pNode);
  VSTSystem.AddChild(pNode);
  VSTSystem.AddChild(pNode);
  VSTSystem.EndUpdate;
end;

procedure TForm1.VSTSystemGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var
  Level : Integer;
begin
Level := VSTSystem.GetNodeLevel(Node);
if Column = 0 then
  begin
    if Level = 0 then
      CellText := Objekt;
    if Level = 1 then
      CellText := Zentrale;
    if Level = 2 then
      begin
        if Node.Index = 0 then
          CellText := IPPort
        else
          CellText := COMPort
      end;
  end;
end;
Gruß Jens
Miniaturansicht angehängter Grafiken
vst2_155.gif   vst1_122.gif  
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
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
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz