![]() |
Re: Problem mit Pointer beim VirtualStringTree
Liste der Anhänge anzeigen (Anzahl: 2)
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:
Gruß Jens
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; |
Re: Problem mit Pointer beim VirtualStringTree
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:
Danke schon mal,
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; Gruß Jens |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz