ich habe vor Ewigkeiten mit Turbo Pascal und Delphi 1.0 programmiert und bin vor kurzem auf Lazarus gestossen, weil ich Lust hatte, wieder ein bisschen zu programmieren.
Meine Prozedur macht zum Teil was sie soll, einige Zeilen des Codes werden ignoriert.
Code: Alles auswählen
procedure TfrmHopALong.Zeichnen;
var i : LongInt; // Laufvariable
begin
with pbxSpielfeld.Canvas do
begin
Pen.Color := clBlack;
Pen.Width := 1;
Brush.Color := clRed;
FPlotX := Trunc(FCalcX + (FSpielfeldBreite/2));
FPlotY := Trunc((FSpielfeldHoehe/2) - FCalcY);
Rectangle(FPlotX, FPlotY, FPlotX + FOffset, FPlotY + FOffset);
end;
For i := 1 to FSchritte do
begin
FCalcXX := FCalcY - Sign(FCalcX) * Sqrt(Abs(FB * FCalcX - FC));
// FCalcXX := FCalcY + Sign(FCalcX) * Abs(FB * FCalcX - FC);
FCalcYY := FA - FCalcX;
FCalcX := FCalcXX;
FCalcY := FCalcYY;
FPlotX := Trunc(FCalcX + (FSpielfeldBreite/2));
FPlotY := Trunc((FSpielfeldHoehe/2) - FCalcY);
//pbxSpielfeld.Canvas.Rectangle(FPlotX, FPlotY, FPlotX + FOffset, FPlotY + FOffset);
pbxSpielfeld.Canvas.Pixels[FPlotX, FPlotY] := clBlack;
StatusBar1.Panels[2].Text:=IntToStr(i); // *** wird ignoriert ***
if ((FSchritte Mod 1000) = 0) then StatusBar1.Panels[2].Text := IntToStr(i); // *** wird ignoriert ***
end;
end;
Das Zeichnen der Grafik funktioniert prinzipiell, aber was ich nicht verstehe: warum werden die beiden letzten Zeilen (unabhängig, wo diese in der Schleife stehen) in der Schleife ignoriert?
Nachdem die Schleife durchlaufen wurde, wird der Endwert korrekt in die Statuszeile eingetragen.
Ich habe das Programm auch schon mit einem TImage anstatt der TPaintbox getestet, da tritt das gleiche Phänomen auf. Zusätzlich habe ich dort das Problem, dass das komplette Bild erst nach dem kompletten Schleifendurchlauf dargestellt wird und ich somit keine "Live"-Darstellung habe, wie sich das Bild aufbaut.
Bin ich echt zu doof für Lazarus oder was mache ich falsch?
Gruß, Mario.