![]() |
Pointer of Record --> Record konvertieren
So, ich habe folgenden Record:
Delphi-Quellcode:
und folgende Funktion, die sich selbst rekursiv wieder aufruft:
type
PCatData = ^TCatData; TCatData = record Caption: string; ImageIndex: integer; SubCats: array of PCatData; end;
Delphi-Quellcode:
Starte ich die Rekursion erhalte ich allerdings eine Zugriffsverletzung, die vermutlich daher stammt, dass ich PCatData nicht einfach wie TCatData behandeln kann.
procedure AddNodes(Root: PVirtualNode; Data: PCatData);
var i: integer; NodeData: PNodeData; NewNode: PVirtualNode; begin with frmInteractive do begin NewNode := CatList.AddChild(Root); NodeData := CatList.GetNodeData(NewNode); NodeData.Caption := Data.Caption; NodeData.ImageIndex := Data.ImageIndex; NodeData.Panel := nil; // hinterher ändern for i := low(Data.SubCats) to high(Data.SubCats) do begin AddNodes(NewNode, Data.SubCats[i]); end; end; end; Kann da jemand helfen? |
Re: Pointer of Record --> Record konvertieren
Geht's so?
Delphi-Quellcode:
procedure AddNodes(Root: PVirtualNode; Data: PCatData);
var i: integer; NodeData: PNodeData; NewNode: PVirtualNode; begin with frmInteractive do begin NewNode := CatList.AddChild(Root); NodeData := CatList.GetNodeData(NewNode); NodeData.Caption := Data.Caption; NodeData.ImageIndex := Data.ImageIndex; NodeData.Panel := nil; // hinterher ändern for i := low(Data.SubCats^) to high(Data.SubCats^) do begin AddNodes(NewNode, Data.SubCats^[i]); end; end; |
Re: Pointer of Record --> Record konvertieren
Bringt leider auch nichts .. aber wenn, dann müsste es auch Data^ heißen, oder?
Weil Data ist ja auch vom Typ PNodeData .. |
Re: Pointer of Record --> Record konvertieren
So ähnlich (hatte auch einen Recordpointer übergeben) hatte ich das gemacht:
Delphi-Quellcode:
Aber ich weis nicht, wie das mit dem "PVirtualNode" is...
procedure AddNodes(Root: PVirtualNode; Data: PCatData);
var i: integer; NodeData: PNodeData; NewNode: PVirtualNode; begin with frmInteractive do begin NewNode := CatList.AddChild(Root); NodeData := CatList.GetNodeData(NewNode); NodeData.Caption := Data^.Caption; NodeData.ImageIndex := Data^.ImageIndex; NodeData.Panel := nil; // hinterher ändern for i := low(Data^.SubCats^) to high(Data^.SubCats^) do begin AddNodes(NewNode, Data^.SubCats^[i]); end; end; end; [edit]OOPs... Pointeralarm ^^ Hatte glatt die SubCats übersehen xD[/edit] |
Re: Pointer of Record --> Record konvertieren
Zitat:
Dann hilft das sicher auch nicht, oder?
Delphi-Quellcode:
procedure AddNodes(Root: PVirtualNode; Data: PCatData);
var i: integer; NodeData: PNodeData; NewNode: PVirtualNode; begin with frmInteractive do begin NewNode := CatList.AddChild(Root); NodeData := CatList.GetNodeData(NewNode); NodeData.Caption := Data^.Caption; NodeData.ImageIndex := Data^.ImageIndex; NodeData.Panel := nil; // hinterher ändern for i := low(Data^.SubCats) to high(Data^.SubCats) do begin AddNodes(NewNode, Data^.SubCats[i]); end; end; Zitat:
//Edit: Der xZise war zu schnell... Zitat:
|
Re: Pointer of Record --> Record konvertieren
So, mit eurer Hilfe und mit einem vergessenen New() :wall: funktioniert es nun.
Vielen Dank :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 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-2025 by Thomas Breitkreuz