Einzelnen Beitrag anzeigen

Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#12

Re: Problem mit einer Stringlist

  Alt 11. Jan 2007, 11:31
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?
Richard Mahr
  Mit Zitat antworten Zitat