在DELPHI中的所有对象中都有提供了TOPLEFTHEIGHTWIDTH四个属性用以控制对象的位置和大小另外在DELPHI中还提供了一个TIME的构件利用他们可以方便地实现一些动画
一. 拉幕
拉幕式即从中间往两边慢慢显示画面在此把Dbimage的CENTER属性设成true;把stretch属性设成false把WIDTH属性设成适当设置LEFT的值使其显示在屏幕中间实现动画主要方法是修改LEFT属性(值逐渐变小)和WIDTH属性(值逐渐变大)要注意的是为了让幕布从中间均匀地向两边拉开WIDTH的改变值必须是LEFT改变值的两倍在DIMEER的ontime事件中输入如下语句
if (dbimageleft >) then
begin
dbimageleft:=dbimageleft;
dbimagewidth:=DBImagewidth+;
//dbimagewidth的改变值必须是dbimageleft改变值的倍
end
else
timerenabled:=false;//拉幕结束
把上面程序中的LEFT改为TOPWIDTH改为HEIGHT就可以实现竖直方向的拉幕如果把拉幕这种效果运用于文本类型的对象就可以实现一行一行地显示文本的效果
二. 手风琴
在拉幕式的动画中当画面整个显示后再把画面从两边往中间慢慢遮住如此不断循环象拉手风琴一样实现时需加入一个变量STATE用以表明此时的状态具体程序如下
procedure TFormTimerTimer(Sender: TObject);
begin
if state= then
if (dbimageleft >) then
begin
dbimageleft:=dbimageleft;
dbimagewidth:=DBImagewidth+;
end
else
//当幕完全拉开后改变状态变量
state:=
else
//从两边往中间拉
if dbimageleft< formwidth div then
begin
dbimageleft:=dbimageleft+;
dbimagewidth:=dbimagewidth;
end
else
//当幕合上后改变状态变量
state:=;
end;
三. 栅栏式
画面初始被竖直栅栏遮住然后各条栅栏逐渐变窄被栅栏分割的画面逐渐完整起来在这种动画中栅栏的角色由STATICTEXT类型的对象来充当(画面呈现几条栅栏就需要几个STATICTEXT对象)只需改变STATICTEXT类型对象的LEFT 和 WIDTH属性即可(LEFT逐渐变大WIDTH逐渐变小)在TIMER的ONCLICK事件上对每一个STATICTEXT对象如下处理
if stwidth > then //ST是STACTICTEXT类型的一个对象
begin
stwidth:=stwidth;
stleft:=stleft+ ;
end
else
//再一次循环
begin
stwidth:=; //WIDTH和LEFT由实际情况决定
stleft:=;
end;
如果把上面的栅栏水平排列把LEFT改成TOP把WIDTH改成HEIGHT则成为百页窗的效果大家有兴趣的话可以试试
四. 翻页
这是一种旋转的效果实际上是把TOP的值固定改变HEIGHT的值并把STRETCH的值设为TRUE在TIMER的ONTIME事件中键入以下程序可以实现向上翻页
if dbimageheight > then
dbimageheight:=dbimageheight
若把上面程序中的HEIGHT的属性值从小变到大则实现向下翻页的效果若把TOP改成LEFT把HEIGHT改成WIDTH则实现左右翻页的效果如果把LEFT和WIDTH一起同时改变则可以使图片以的某一条通过图片的竖直线为轴进行旋转在TIMER的ONTIMER事件中程序如下
procedure TFormTimerTimer(Sender: TObject);
begin
if state= then
if dbimagewidth > then
begin
//画面逐渐变小
dbimageleft:=dbimageleft+;
dbimagewidth:=dbimagewidth;
//width的改变值必须是left改变值的两倍
end
else
state:=
else
if dbimagewidth< then
begin
dbimageleft:=dbimageleft;
dbimagewidth:=dbimagewidth+;
end
else
state:=
end;
从以上程序可以看出这是把画面变小后再慢慢变大变小是一个状态(STATE=)变在是另一个状态(STATE=)这两种状态交替出现即可出现动画
五. 从画面外逐渐移(飞)过
在设计封面的时候经常需要把某标题从某个画面上飞过 要实现该类型的动画实际上只需改变标题的TOP(垂直方向飞过)或LEFT属性(水平方向飞过)
例如实现一个标题在一幅画上从左往右飞过先在FORM里建立一个图形对象DBIMAGE和文字对象STATICTEXT(注意TEXT类型的对象无法显示在图片上)把位置和大小大小尺寸设好然后在FORM里建立一个TIME对象TIME把其ENABLED属性设为TRUEINTERVAL属性设为并在事件ONTIME里键入如下语句
procedure TFormTimerTimer(Sender: TObject);
begin
if statictextleft< dbimagewidth+dbimageleft then
statictextleft:=statictextleft+
else
statictextleft:=dbimageleft;
//当标题飞出图片后使标题重新位于图片的左边
再一次从左向右入屏幕
end;
说明如果只想使标题从左向右移动一次ELSE语句改为Timerenabled:=false; 数值是标题移动的速度值可以随意更改若标题只移到图片的某一位置则把statictextleft< dbimagewidth+dbimageleft改为statictextleft< 位置值并把ELSE语句改为Timerenabled:=false; 只需把LEFT的值从大变到小则实现从右往左飞过把上面的LEFT改为TOP把WIDTH改为HEIGHT即可实现垂直方向的动画
六. 逐渐显示(即把图片从某一个边界逐渐拉出来)
实现这一类型的动画不但要改变TOPLEFT属性还要改变HEIGHT和WIDTH属性 例把一幅画从右边往左边拉(右切入)在上例中以DBIMAGE为例这时要把Dbimage的center和stretch属性设为FALSE图片的左边界放在FORM的右边界处WIDTH设为
procedure TFormtimerTimer(Sender: TObject);
begin
if dbimageleft >then
begin
dbimageleft:=dbimageleft;
dbimagewidth:=dbimagewidth+;
//LEFT的改变值与WIDTH的改变值必须一样
end
else
begin
dbimageleft:=formwidth;
dbimagewidth:=;
end;
end;
说明把上面的LEFT改为TOPWIDTH改为HEIGHT即可实现从下往上拉(下切入)若只切入到某一点可以把Dbimageleft >中的改为设定点的坐标并把ELSE 语句改为 Timerenabled:=false;
尽管DELPHI提供了不少关于动画方面的开发工具但是只要稍稍修改一下属性即可轻轻松松地实现常见的一些特技显示你愿意试一下吗?