procedure TForm1.Button5Click(Sender: TObject);
var
  bm, bm1: TBitMap;
  x, y: integer;
  r, a: single;
  xo, yo: integer;
  s, c: extended;
begin
 

  repeat
    for y := 0 to bm.Height - 1 do begin
      for x := 0 to bm.Width - 1 do begin
        r := sqrt(sqr(x - xo) + sqr(y - yo));
        SinCos(a + arctan2((y - yo), (x - xo)), s, c);
        bm1.Canvas.Pixels[x,y] := bm.Canvas.Pixels[
          round(xo + r * c), round(yo + r * s)];
      end;
      Application.ProcessMessages;
    end;
    Image1.Canvas.Draw(xo, yo, bm1);
    a := a + 0.05;
    Application.ProcessMessages;
  until Form1.Tag <> 0;
  bm.Destroy;
  bm1.Destroy;
end;