其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

DELPHI中利用对象的常用属性制作动画


发布日期:2023年08月07日
 
DELPHI中利用对象的常用属性制作动画

在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提供了不少关于动画方面的开发工具但是只要稍稍修改一下属性即可轻轻松松地实现常见的一些特技显示你愿意试一下吗?

上一篇:用Delphi实现不同数据库系统之间的数据转移

下一篇:DELPHI超级Internet控件集--INDY