@Gausi: Danke, aber leider funktioniert auch das nicht.
Auch mit dieser Änderung funkt der Code nicht
Delphi-Quellcode:
function TForm2.CreateNodes: TNode;
var
Data: TNodeData; Node: TNode;
begin
Node := TNode.Create(CompareStr);
Data := TNodeData.Create(0,'TButton',nil);
//Data.KeyStr := 'TButton';
Root.AddSubnode(TNode.Create(CompareStr),Data);
Node := TNode.Create(CompareStr);
Data := TNodeData.Create(0,'TEdit',nil);
//Data.KeyStr := 'TEdit';
Root.AddSubnode(TNode.Create(CompareStr),Data);
Node := TNode.Create(CompareStr);
Data := TNodeData.Create(0,'TGrid',nil);
//Data.KeyStr := 'TGrid';
Root.AddSubnode(TNode.Create(CompareStr),Data);
Result := Root;
end;
procedure TForm2.FormCreate(Sender: TObject);
var i: Integer; D: TNodeData; N: TNode;
begin
N:=CreateNodes();
for i := 0 to N.Count-1 do
begin
D := N.Nodes[i].Data;
Memo1.Lines.Add(D.KeyStr);
end;
end;
Hier noch der geänderte Constructor für TNodeData. Node wird nun innerhalb des Konstruktors nicht mehr erzeugt.
Delphi-Quellcode:
constructor TNodeData.Create(aKey: Integer; aKeyStr: String; aData: Pointer);
begin
inherited Create;
//FNode := TNode.Create(CompareStr); //wurde nun entfernt
FData := aData;
FKeyStr := aKeyStr;
FKey := aKey;
end;
Ich erhalte eine Schutzverletzung, der Debugger bleibt auf
Memo1.Lines.Add(D.KeyStr);
in der Methode FormCreate stehen.
Warum? Was mache ich da noch falsch? Ich will doch die Knoten als Subknoten an Root anhängen. Alles Andere folgt später, wenn das hier klappt.
Der Code ist mit Ausnahme der Codeausschnitte hier gleich dem im Eingangsbeitrag geblieben, die Änderungen sind nun hier in diesem Beitrag.