动画屏保的制作

作者在 2010-01-25 17:59:27 发布以下内容
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    Image2: TImage;
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Timer1Timer(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Image1Click(Sender: TObject);
    procedure Image2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

Const Bmp:array[1..6] of String=
('bmp1.bmp','bmp2.bmp','bmp3.bmp',
'bmp4.bmp','bmp5.bmp','bmp6.bmp'); //定义位图文件名的字符串数组
var
  Form1: TForm1;
  i,w,h:integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Color:=clBlack;
Image1.Top:=150;
Image1.Left:=150;
Image1.Width:=Image2.picture.Width;
Image1.Height:=Image2.Picture.Height;
w:=Image2.picture.Width;
h:=Image2.Picture.Height;

Timer1.Enabled:=True;   //程序一运行就开启时钟
i:=0;   //变量i要在使用它的函数外预先定义,或者不预先定义,系统会默认为0
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
If key=27 Then
  Application.Terminate          //退出程序
Else;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var k:Integer;
begin
If i>=6 Then
I:=0;
i:=i+1;
Image2.Picture.LoadFromFile(Bmp[i]);
Case i Of
1:Begin
  For k:=0 To w Do
  Begin     //向左收缩效果
   Image1.Canvas.CopyRect(Rect(0,0,w,h),Image2.Canvas,Rect(0,0,k,h));
   Form1.Canvas.Draw(Image1.Left,Image1.Top,Image1.picture.bitmap);
  end;
  end;
2:Begin
 For k:=0 To w Do
  Begin       //向右上角尖灭
   Image1.Canvas.CopyRect(Rect(k,0,w,h),Image2.Canvas,Rect(0,k,w,h));
   Form1.Canvas.Draw(Image1.Left,Image1.Top,Image1.picture.bitmap);
  end;
 end;
3:Begin
  For k:=0 To 500 Do
  Begin      //神奇地模糊转化为清晰的效果
   Image1.Canvas.CopyRect(Rect(0,k,w,h),Image2.Canvas,Rect(0,k,w,k+1));
   Form1.Canvas.Draw(Image1.Left,Image1.Top,Image1.picture.bitmap);
  end;
  end;
4:Begin
 For k:=0 To 500 Do
  Begin        //平缓下拉效果
   Image1.Canvas.CopyRect(Rect(0,k-1,w,k),Image2.Canvas,Rect(0,k-1,w,k));
   Form1.Canvas.Draw(Image1.Left,Image1.Top,Image1.picture.bitmap);
  end;
  end;
5:Begin
 For k:=0 To w Do
  Begin         //由下向上拉伸
   Image1.Canvas.CopyRect(Rect(0,w-k,w,h),Image2.Canvas,Rect(0,0,w,k));
   Form1.Canvas.Draw(Image1.Left,Image1.Top,Image1.picture.bitmap);
  end;
  end;
6:Begin
  For k:=0 To 500 Do
  Begin       //逐渐快速放大
   Image1.Canvas.CopyRect(Rect(0,0,w,h),Image2.Canvas,Rect(k,0,w,h));
   Form1.Canvas.Draw(Image1.Left,Image1.Top,Image1.picture.bitmap);
  end;
  end;
end;  //CASE语句结束
end; //IF语句结束

procedure TForm1.FormDestroy(Sender: TObject);
begin
  //释放资源
Image1.Picture.Bitmap:=Nil;
Image2.Picture.Bitmap:=Nil;
Timer1.Enabled:=False;    //关闭时钟
end;

procedure TForm1.Image1Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.Image2Click(Sender: TObject);
begin
  close;
end;

end.

编程点滴 | 阅读 1581 次
文章评论,共0条
游客请输入验证码
浏览2343966次