请教:
我的 form1 窗体上有个 image1 控件,timer1 控件
我希望当我单击 button1 ,
图片从 image1 的左下角,移动到 左上角那么/
procedure TForm1.Button1Click(Sender: TObject);var
filename:string;
map:Tbitmap; //位图实例变量
imagew:integeer; //image1的宽
imageh:integeer; //image1的高
begin
filename:=ExtractFilePath(paramstr(0))+'000.bmp';
map:=Tbitmap.Create;
map.LoadFromFile(filename); //这里程序要怎么写?
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
//这里程序要怎么写?
end;谢谢!
我的 form1 窗体上有个 image1 控件,timer1 控件
我希望当我单击 button1 ,
图片从 image1 的左下角,移动到 左上角那么/
procedure TForm1.Button1Click(Sender: TObject);var
filename:string;
map:Tbitmap; //位图实例变量
imagew:integeer; //image1的宽
imageh:integeer; //image1的高
begin
filename:=ExtractFilePath(paramstr(0))+'000.bmp';
map:=Tbitmap.Create;
map.LoadFromFile(filename); //这里程序要怎么写?
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
//这里程序要怎么写?
end;谢谢!
filename:string;
map:Tbitmap; //位图实例变量
imageh:integer; //image1的高
maph:integer; //图片的高
begin
filename:=ExtractFilePath(paramstr(0))+'000.bmp';
map:=Tbitmap.Create;
map.LoadFromFile(filename);
imageh:=Image1.Height;
maph:=map.Height;
Image1.Canvas.Draw(0,(imageh-maph),map);
end;怎么使图片移动啊?
谢谢!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
Image1: TImage;
Timer1: TTimer;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
x,y:integer;
map:Tbitmap; //位图实例变量
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var
filename:string;
imageh:integer; //image1的高
maph:integer; //图片的高
begin filename:=ExtractFilePath(paramstr(0))+'000.bmp';
map:=Tbitmap.Create;
map.LoadFromFile(filename);
imageh:=Image1.Height;
maph:=map.Height;
x:=0;
y:=imageh-maph;
if (Timer1.Enabled = false )then Timer1.Enabled:=true;end;procedure TForm1.Timer1Timer(Sender: TObject);
var
m,n:integer;
pic:Trect;
begin
if (y>0) then
begin
Image1.Canvas.Draw(x,y,map);
m:=x;
n:=y;
image1.Canvas.brush.color:=clBlue;
pic:=Rect(x,y,map.width,map.height); //把以前的覆盖掉
image1.Canvas.FillRect(pic);
y:=y-5;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
if (Timer1.Enabled = true) then Timer1.Enabled:=false;
end;procedure TForm1.FormCreate(Sender: TObject);
var
pic:Trect;
begin
image1.Canvas.brush.color:=clBlue;
pic:=Rect(0,0,image1.width,image1.height);
image1.Canvas.FillRect(pic);
end;end.
这样也不行啊!
各位大哥帮我看看啊!
谢谢!
pic:=Rect(x,y,map.width,map.height);
image1.Canvas.FillRect(pic);//把以前的覆盖掉为什么不能把以前的覆盖掉呢?
谢谢!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, JPEG;type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
AJpeg : TJpegImage;
iX, iY: Integer;
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval := 50;
Timer1.Enabled := False;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
AJpeg := TJpegImage.Create;
AJpeg.LoadFromFile('C:\1.jpg');
iX := 0;
iY := Image1.Height;
Timer1.Enabled := True;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
iY := iY - 5; //每次移动的距离为5 Pixels
if iY < 0 then iY := 0;
Image1.Canvas.Draw(iX, iY, AJpeg);
if iY = 0 then
begin
Timer1.Enabled := False;
AJpeg.Free;
end;
end;end.
2. 不要在Timer事件中调用Draw。可以用 TPaintBox, 应该在OnPaint事件中画图,而不是在Timer事件中调用Draw, 在Timer事件中可以调用 Invalidate以使控件刷新。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
Image1: TImage;
Timer1: TTimer;
Button2: TButton;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
procedure RefreshActivePoint;
procedure MoveImage;
{ Private declarations }
public
{ Public declarations }
FBitMap:TBitMap; //保存图形
FBitMapBuff:TBitMap; //缓冲区
FActivePoint:TPoint; //当前移动到的位置
FMoveXSpace:Integer; //X方向要移动的距离
FMoveYSpace:Integer; //Y方向要移动的距离
FStop:Boolean;
end;
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
FBitMapBuff:=TBitmap.Create;
FBitMap:=TBitmap.Create;
//缓冲区图大小和Image1大小相同
FBitMapBuff.Width:=Image1.Width;
FBitMapBuff.Height:=Image1.Height;
FBitMap.LoadFromFile('D:\Winnt\Greenstone.bmp');
FActivePoint:=Point(0,0);
FMoveXSpace:=10;
FMoveYSpace:=10;
end;function GetRandomSpace:Integer;
begin
//返回一个随机的移动距离
Randomize;
Result:=Random(30);
end;procedure TForm1.RefreshActivePoint;
begin
//检查移动边界,确定下一个要移动到的位置
if (FActivePoint.X+FBitMap.Width>=Image1.Width) then
FMoveXSpace:=0-GetRandomSpace
else if FActivePoint.X<=0 then
FMoveXSpace:=GetRandomSpace; if FActivePoint.Y+FBitMap.Height>=Image1.Height then
FMoveYSpace:=0-GetRandomSpace
else if FActivePoint.Y<=0 then
FMoveYSpace:=GetRandomSpace;
FActivePoint:=Point(FActivePoint.X+FMoveXSpace,FActivePoint.Y+FMoveYSpace); if FActivePoint.X+FBitMap.Width>Image1.Width then
FActivePoint.X:=FActivePoint.X-(FActivePoint.X+FBitMap.Width-Image1.Width)
else if FActivePoint.X<0 then
FActivePoint.X:=0; if FActivePoint.Y+FBitMap.Height>Image1.Height then
FActivePoint.Y:=FActivePoint.Y-(FActivePoint.Y+FBitMap.Height-Image1.Height)
else if FActivePoint.Y<0 then
FActivePoint.Y:=0;
end;procedure TForm1.MoveImage;
begin
//先绘制缓冲区中的图形
With FBitMapBuff do
begin
FreeImage;
CleanupInstance;
Canvas.FillRect(Rect(0,0,FBitMapBuff.Width,FBitMapBuff.Height));
Canvas.Draw(FActivePoint.X,FActivePoint.Y,FBitMap);
end;
//然后直接给Image 绘制
Image1.Canvas.Draw(0,0,FBitMapBuff);
RefreshActivePoint;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
//循环移动
FStop:=Not FStop;
while FStop do
begin
MoveImage;
Application.ProcessMessages;
end;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
//定时器移动
Timer1.Enabled:=Not Timer1.Enabled;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
MoveImage;
end;end.