Hola.
A ver, modifico un poco un ejemplo a ver si podes lograr lo que estas buscando.
Código Delphi
[-]
...
implementation
procedure CenterEllipse(Img: TImage; x1,y1,x2,y2: Integer; aColor: TColor);
var
C,R: TPoint;
begin
C.X := (Img.Picture.Width) div 2;
C.Y := (Img.Picture.Height) div 2;
R.X := (x2-x1) div 2 ;
R.Y := (y2-y1) div 2;
if (C.X-R.X < 0) or (C.Y-R.Y < 0) or
(C.X+R.X > Img.Picture.Width) or (C.Y+R.Y >Img.Picture.Height) then
raise Exception.Create('Elipse fuera de rango');
Img.Canvas.Brush.Style := bsClear;
Img.Canvas.Pen.Color := aColor;
Img.Canvas.Ellipse(C.X - R.X, C.Y - R.Y, C.X + R.X, C.Y + R.Y);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Picture.LoadFromFile('Blank.bmp');
Image1.Width := Image1.Picture.Width;
Image1.Height := Image1.Picture.Height;
Self.Color := clMoneyGreen;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i,x : Integer;
begin
x := 10;
for i := 0 to 50 do
begin
CenterEllipse(Image1, x, x, x*2, x*2, clBlack);
Inc(x, 10);
end;
end;
Este es el resultado, todos centrados.
Saludos
Nota:
Delphi 7 soporta
raise Exception (
raise command)