Показать сообщение отдельно
  #4  
Старый 29.01.2009, 22:33
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,105
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну например, №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;

Вот и вся задача. Рисовать будет не красиво, но правильно.
Ответить с цитированием