unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormPaint(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;
  BitMap:TBitMap;
  a,b:integer;
  Angle:Extended;
  c:integer;
implementation{$R *.dfm}procedure TForm1.FormPaint(Sender: TObject);
begin
  self.Canvas.Pen.Color:=clred;
  self.Canvas.MoveTo(50,50);
  self.Canvas.LineTo(100,100);
  self.Canvas.Pen.Color:=clBlue;
  self.Canvas.MoveTo(110,110);
  self.Canvas.LineTo(250,110);
  self.Canvas.RoundRect(250,110,250+Round(50*1.732),160,350,210);    //我想画一条弧线,可是实际上我没有做到哦
 // self.Canvas.();
end;
procedure TurnCorner(alpha:extended;x,y:real;Bit:TBitMap);//转弯,以图片中心为旋转点旋转任意角度  在(x,y)这个地方转
var
  oldx,oldy:integer;//图片某点原先的旧坐标
  newx,newy:real;//图片某点旋转之后的新坐标
begin
  for oldx:=0 to Bit.width-1 do
    begin
      for oldy:=0 to Bit.height-1 do
        begin
          newx:=(oldx-Bit.Width div 2)*cos(alpha*3.14159/180)-(oldy-Bit.Height div 2)*sin(alpha*3.14159/180);
          newy:=(oldx-Bit.Width div 2)*sin(alpha*3.14159/180)+(oldy-Bit.Height div 2)*cos(alpha*3.14159/180);
          Form1.Canvas.Pixels[round(newx)+Round(x)+Bit.Width div 2,round(newy)+Round(y)+Bit.Height div 2]:=Bit.Canvas.Pixels[oldx,oldy];
        end;
    end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
  a1:integer;
  b1:integer;
begin
    Form1.Refresh;
    try
    BitMap:=TBitMap.Create;
    BitMap.LoadFromFile('Car1.bmp');
    TurnCorner(135+Angle,50+0.7*14+a,50-0.7*14+b,BitMap);
    showmessage('Angle is :'+FloatToStr(135+Angle));
    a:=a+5;b:=b+5;Angle:=Angle+15;       //这样可以实现转弯了
    while Angle>=50 do
    begin
      a1:=a;b1:=b;
      //showmessage('a1 is :'+IntToStr(a1)+#13+'b1  is :'+IntToStr(b1));
      Form1.Refresh;
      TurnCorner(0,50+a1+BitMap.Width div 2,50+b1+c+BitMap.Height div 2,BitMap);
      c:=c+5;
    end;    finally
      BitMap.Free;
    end;end;end.
为什么这里到了最后就死循环了,就不能好好的运行下去了呢?

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      a1:integer; 
      b1:integer; 
    begin 
        Form1.Refresh; 
        try 
        BitMap:=TBitMap.Create; 
        BitMap.LoadFromFile('Car1.bmp'); 
        TurnCorner(135+Angle,50+0.7*14+a,50-0.7*14+b,BitMap); 
        showmessage('Angle is :'+FloatToStr(135+Angle)); 
        a:=a+5;b:=b+5;{Angle:=Angle+15; }     //这样可以实现转弯了 
        while Angle>=50 do 
        begin 
          Angle:=Angle+15;//这个放这吧
          a1:=a;b1:=b; 
          //showmessage('a1 is :'+IntToStr(a1)+#13+'b1  is :'+IntToStr(b1)); 
          Form1.Refresh; 
          TurnCorner(0,50+a1+BitMap.Width div 2,50+b1+c+BitMap.Height div 2,BitMap); 
          c:=c+5; 
        end;     finally 
          BitMap.Free; 
        end; end; 
      

  2.   

    循环变量Angle始终都没有变化,可不死在那了,像阿飞那样改改,把逻辑考虑清楚了~~~