Hallo,
ich würde eher Bummis Ansatz wählen: Denn den Spass mit Controls (TShape) zu erledigen heißt ja auch diese wieder los zu werden (im Eingangspost steht da was von: "die Summe ändert sich ständig."); das ist zwar eigentlich auch kein Problem, aber lästiger Mehraufwand.
Man könnte also den Code von nuclearping (leicht geändert: Es kommt besser, wenn die Quadrate nicht abgeschnitten werden) und den Ansatz von Bummi vereinen zu:
Delphi-Quellcode:
const
SQUARE_SIDE = 20;
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
i, l, t : Integer;
begin
PaintBox1.Canvas.Brush.Color := clSkyBlue;
l := 0;
t := 0;
for i := 1 to FSum do
begin
PaintBox1.Canvas.FillRect (Rect (l, t, l + SQUARE_SIDE, t + SQUARE_SIDE));
Inc (l, SQUARE_SIDE + 2);
if PaintBox1.Width < l + SQUARE_SIDE then
begin
l := 0;
Inc (t, SQUARE_SIDE + 2)
end
end
end;
Wann jetzt noch ein Invalidate notwendig wird wirst Du sicherlich rausfinden.
[EDIT]Wie unhöflich von mir[/EDIT] Willkommen in der
DP
Gruß