Ich hab schon wieder ein Problem, das aber nicht mit der Stringlist zusammenhängt, sondern mit Pointern (denke ich)
Ich habe meinen Startpunkt FRoot, dessen Eigenschaften im Create gesetzt werden
Delphi-Quellcode:
constructor TBauteilListe.Create;
begin
inherited create;
FList := TStringlist.Create;
new(FRoot);
FRoot^.ID := 'root';
FRoot^.Typ := bttRoot;
end;
Die ID ist also 'root'
Es sind meiner Meinung nach noch Fehler in der Methode, die das Bauteil über die ID sucht und in der Methode, die ein neues Bauteil anhängt. Ich habe eine Listbox, in der mir die Bauteile angezeigt, die Liste zeigt alle Bauteile an, die hinzugefügt habe, ich habe im OnClick Ereignis eine Methode, die in drei Labels den Namen des ausgewählten Bauteils, die übergeordneten Bauteile und die untergeordneten Bauteile zurückliefert.
Egal, was ich suche, ich kriege immer nur 'root' zurück
hier die Methoden
Delphi-Quellcode:
function TBauteilListe.GetBauteil(ID: string): PBauteil;
begin
GetPBauteil(ID);
Result := FPBauteil; // Dies ist eine Private variable meiner Klasse, deren Wert in GetPBauteil gesetzt wird
end;
procedure TBauteilListe.GetPBauteil(ID: string);
procedure Rekursiv(p: PBauteil; Search: string; var result: PBauteil);
var i: integer;
begin
if p <> nil
then
if p^.ID = Search // Durch breakpoints sah ich, dass ich über die Rekursion bis hierhin gekommen bin, jedoch hat result, also FPBauteil danach immer noch den gleichen Wert!!!
then
result := p
else
if p^.Next <> nil
then
for i := low(p^.next) to high(p^.next) do
Rekursiv(p^.next[i],Search,p);
end;
begin
Rekursiv(FRoot,ID,FPBauteil);
end;
Was ist hier falsch?