Rekusif - Problem mit Integer Wert :(

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Rekusif - Problem mit Integer Wert :(

Beitrag von pluto »

Hallo,
seit einigen tagen habe ich ein nerfiges Problem wo ich einfach nicht weiter kommen.

Ich habe eine Baum Strucktur und jetzt versuche ich das Längste Wort in diesem Baum zu berechnen + Ebene also auf welcher Ebene dieses Wort ist.

Das brauche ich, später sollen nach spalten hinzu kommen. Doch leider klappt das nicht.
Weil je höher ich in eine ebne rein gehe das so ungenauer wird der wert.

Ich vermute es liegt an der Rekusin selber. Ich poste mal meinen Code in der Hoffnung das mir jemand von euch sagt, das ich falsch gemacht habe:

Code: Alles auswählen

function TPlutoTV.GetHighHederItems(const aBaum:TBaum; var za:Integer; const aSpalte:Integer = -1; const aW:Integer = -1):Integer;
var
  i,pw,z,x,l,tx,m:Integer;
begin
  pw:=0; z:=-1;
  if za = 1 then
    tx:=20
  else
    tx:=za*10;
  za:=za+1;
  for i:=0 to High(aBaum.items) do begin
    if (aSpalte = 0) and (aBaum.items[i].Caption <> '') then begin
      pw:=buffer.Canvas.TextWidth(aBaum.items[i].Caption)+tx;
      if pw > z then z:=pw;
      if (abaum.items[i].items <> NIL) and (abaum.items[i].Open) then begin
        l:=GetHighHederItems(abaum.items[i].items,za,aSpalte,tx+10);
        if l > z then z:=l;
      end
    end;
  end;
  result:=z;
end;
10 ist der Abstand der Ebene von links.
Die erste ebene ist bei fängt bei 20 an, die zweite bei 30 die dritte bei 40 und soweiter.

das Seltsamme ist nur beim zeichnen klappt das genau auf dieser art und weise. nur hier nicht. ich weiß einfach nicht mehr weiter *schniff*.

Vielen Dank, für Hinweise. Mit Rekusionen hatte ich bisher immer Probleme.
Aber ohne sie kann man das doch gar nicht lösen oder doch ?
MFG
Michael Springwald

Antworten