Ну например, №3. В упрощенном варианте, когда всегда идет полная перерисовка. Ну и пропустим заполнение массива.
Код:
type
TCircle = record
x, y, r : Integer
end;
type
Form1 = class(TForm)
pbDraw : TPaintBox;
procedure pbDrawPaint(Sender : TObject);
end;
var
ACircles : Array Of TCircle;
procedure TForm1.pbDrawPaint(Sender : TObject);
var
I : Integer;
R : TRect;
begin
With pbDraw.Canvas Do
begin
Brush.Color := clWhite;
pbDraw.Canvas.Pen.Color := clBlack;
pbDraw.Canvas.FillRect(Rect(0,0,pbDraw.Width,pbDraw.Height);
For I := Low(ACircles) To High(ACircles) Do
begin
If ACircles[i].r > 5
Then R := Rect(ACircles[i].x - Int(ACircles[i].r/2), ACircles[i].y - Int(ACircles[i].r/2),ACircles[i].x + Int(ACircles[i].r/2), ACircles[i].y + Int(ACircles[i].r/2))
Else R := Rect(ACircles[i].x - ACircles[i].r, ACircles[i].y - ACircles[i].r,ACircles[i].x + ACircles[i].r, ACircles[i].y + ACircles[i].r/2);
Ellipse(R);
end;
end;
end;
Вот и вся задача. Рисовать будет не красиво, но правильно.