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.
为什么这里到了最后就死循环了,就不能好好的运行下去了呢?
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.
为什么这里到了最后就死循环了,就不能好好的运行下去了呢?
解决方案 »
- DELPHI 中怎么显示svg图形
- 有没有解析HTML文件的组件?
- 关于TListview的线程传递安全问题,急啊
- 关于 DELPHI 7 中的 OFFICE 对象
- indy的demos,chat的client会死,怎么回事?
- 在DLL中使用ADO的问题
- 基本问题:如何选中行(快接键),由函数声明处如何快速的跳转到函数体
- PCOM控件中的sio_ioctl(),参数如何动态设置?特别是第三个参数
- 本人欲拜师,请各位朋友们不吝赐教,
- 请问,要如何才能把ListView和数据库联系到一起,即用ListView显示数据库中的内容?
- 就剩这么点分了.调用DLL时报错:access violation at address
- 读内存字节 这个函数怎么写 在线等
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;