linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘网络学院网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > Delphi >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·HexToStr函数和StrToHex函数
·Delphi中的进制转换
·delphi轻松设置无边框透明窗体
·delphi第三方控件安装(Ehlib)
·DELPHI组件安装全攻略
·delphi动态创建控件
·开发工具比较Visual C++ VS De
·delphi完整身份证效验程序实例
·delphi中的Format函数详解
·delphi编程获取打印机的打印任
·如何判断文本文件的编码格式
·深入研究Variant数组
·用delphi编写网络游戏的外挂
·Delphi技巧-用户自定义数据类型
·delphi设置控件透明
最新文章
·在应用程序中跟踪MOUSE的坐标
·压缩和修复MS Access 2000文件
·DELPHI 6.0 动画制做
·怎样在Delphi中调用LastError信
·怎样得到主域服务器名称
·怎样利用递归实现删除某一目录
·读出主键下所有项
·如何制作照片底片效果的图像(
·获得Modem的状态
·WebBrowser屏幕滚动的实现,设
·有关字符串处理的小技巧
·Delphi建立键盘鼠标动作纪录与
·Delphi中布尔类型辨析
·DELPHI程序注册码设计
·图形的不规则的Copy
Google
 
DELPHI中利用对象的常用属性制作动画
[ 作者:  加入时间:2007-10-30 14:58:24  来自:Linux联盟收集整理 ]
在DELPHI中的所有对象中都有提供了TOP、LEFT、HEIGHT、WIDTH四个属性,用以控制对象的位置和大小;另外在DELPHI中还提供了一个TIME的构件,利用他们可以方便地实现一些动画。3vSLinux联盟
3vSLinux联盟
一. 拉幕3vSLinux联盟
3vSLinux联盟
拉幕式即从中间往两边慢慢显示画面。在此把Dbimage1的CENTER属性设成true;把stretch属性设成false。把WIDTH属性设成 0,适当设置LEFT的值,使其显示在屏幕中间。实现动画主要方法是修改LEFT属性(值逐渐变小)和WIDTH属性(值逐渐变大),要注意的是为了让幕布从中间均匀地向两边拉开,WIDTH的改变值必须是LEFT改变值的两倍。在DIMEER1的ontime事件中输入如下语句:3vSLinux联盟
3vSLinux联盟
if (dbimage1.left >0) then3vSLinux联盟
begin3vSLinux联盟
  dbimage1.left:=dbimage1.left-1;3vSLinux联盟
  dbimage1.width:=DBImage1.width+2;3vSLinux联盟
  
//dbimage1.width的改变值必须是dbimage1.left改变值的2倍3vSLinux联盟
end3vSLinux联盟
else3vSLinux联盟
timer1.enabled:=false;//拉幕结束。
3vSLinux联盟
3vSLinux联盟
把上面程序中的LEFT改为TOP,WIDTH改为HEIGHT就可以实现竖直方向的拉幕。如果把拉幕这种效果运用于文本类型的对象,就可以实现一行一行地显示文本的效果。3vSLinux联盟
3vSLinux联盟
二. 手风琴3vSLinux联盟
3vSLinux联盟
在拉幕式的动画中,当画面整个显示后,再把画面从两边往中间慢慢遮住,如此不断循环,象拉手风琴一样。实现时,需加入一个变量STATE,用以表明此时的状态。具体程序如下:3vSLinux联盟
3vSLinux联盟
procedure TForm1.Timer1Timer(Sender: TObject);3vSLinux联盟
begin3vSLinux联盟
  if state=1   then3vSLinux联盟
  if (dbimage1.left >0) then3vSLinux联盟
  begin3vSLinux联盟
    dbimage1.left:=dbimage1.left-1;3vSLinux联盟
    dbimage1.width:=DBImage1.width+2;3vSLinux联盟
  end3vSLinux联盟
  else
//当幕完全拉开后,改变状态变量3vSLinux联盟
    state:=23vSLinux联盟
  else3vSLinux联盟
  
//从两边往中间拉3vSLinux联盟
    if   dbimage1.left< form1.width   div 2 then3vSLinux联盟
  begin3vSLinux联盟
    dbimage1.left:=dbimage1.left+1;3vSLinux联盟
    dbimage1.width:=dbimage1.width-2;3vSLinux联盟
  end3vSLinux联盟
  else3vSLinux联盟
  
//当幕合上后,改变状态变量3vSLinux联盟
        state:=1;3vSLinux联盟
end;
3vSLinux联盟
3vSLinux联盟
三. 栅栏式3vSLinux联盟
3vSLinux联盟
画面初始被竖直栅栏遮住,然后各条栅栏逐渐变窄,被栅栏分割的画面逐渐完整起来。在这种动画中,栅栏的角色由STATICTEXT类型的对象来充当(画面呈现几条栅栏就需要几个STATICTEXT对象)。只需改变STATICTEXT类型对象的LEFT 和 WIDTH属性即可(LEFT逐渐变大,WIDTH逐渐变小),在TIMER1的ONCLICK事件上,对每一个STATICTEXT对象如下处理:3vSLinux联盟
3vSLinux联盟
3vSLinux联盟
if   st1.width >0   then //ST1是STACTICTEXT类型的一个对象3vSLinux联盟
begin3vSLinux联盟
  st1.width:=st1.width-2;3vSLinux联盟
  st1.left:=st1.left+1 ;3vSLinux联盟
end3vSLinux联盟
else3vSLinux联盟
//再一次循环3vSLinux联盟
  begin3vSLinux联盟
  st1.width:=40;  
//WIDTH和LEFT由实际情况决定3vSLinux联盟
   st1.left:=40;3vSLinux联盟
end;
3vSLinux联盟
3vSLinux联盟
3vSLinux联盟
如果把上面的栅栏水平排列,把LEFT改成TOP,把WIDTH改成HEIGHT,则成为百页窗的效果,大家有兴趣的话可以试试。3vSLinux联盟
3vSLinux联盟
四. 翻页3vSLinux联盟
3vSLinux联盟
这是一种旋转的效果,实际上是把TOP的值固定,改变HEIGHT的值,并把STRETCH的值设为TRUE。在TIMER1的ONTIME事件中键入以下程序可以实现向上翻页:3vSLinux联盟
3vSLinux联盟
if   dbimage1.height >0   then3vSLinux联盟
dbimage1.height:=dbimage1.height-4;
3vSLinux联盟
3vSLinux联盟
若把上面程序中的HEIGHT的属性值从小变到大,则实现向下翻页的效果。若把TOP改成LEFT,把HEIGHT改成WIDTH,则实现左右翻页的效果。如果把LEFT和WIDTH一起同时改变,则可以使图片以的某一条通过图片的竖直线为轴进行旋转,在TIMER1的ONTIMER事件中,程序如下:3vSLinux联盟
3vSLinux联盟
procedure TForm1.Timer1Timer(Sender: TObject);3vSLinux联盟
begin3vSLinux联盟
  if state=1     then3vSLinux联盟
  if dbimage1.width >0   then3vSLinux联盟
  begin3vSLinux联盟
    
//画面逐渐变小3vSLinux联盟
       dbimage1.left:=dbimage1.left+1;3vSLinux联盟
    dbimage1.width:=dbimage1.width-2;3vSLinux联盟
    
//width的改变值必须是left改变值的两倍3vSLinux联盟
       end3vSLinux联盟
  else3vSLinux联盟
  state:=23vSLinux联盟
  else3vSLinux联盟
  if dbimage1.width< 250   then3vSLinux联盟
  begin3vSLinux联盟
    dbimage1.left:=dbimage1.left-1;3vSLinux联盟
    dbimage1.width:=dbimage1.width+2;3vSLinux联盟
  end3vSLinux联盟
  else3vSLinux联盟
  state:=13vSLinux联盟
end;3vSLinux联盟
3vSLinux联盟
从以上程序可以看出,这是把画面变小后再慢慢变大,变小是一个状态(STATE=1),变在是另一个状态(STATE=2),这两种状态交替出现,即可出现动画。3vSLinux联盟
3vSLinux联盟
五. 从画面外逐渐移(飞)过3vSLinux联盟
3vSLinux联盟
在设计封面的时候,经常需要把某标题从某个画面上飞过。 要实现该类型的动画实际上只需改变标题的TOP(垂直方向飞过)或LEFT属性(水平方向飞过)。3vSLinux联盟
3vSLinux联盟
例如实现一个标题在一幅画上从左往右飞过。先在FORM1里建立一个图形对象DBIMAGE1和文字对象STATICTEXT1(注意TEXT类型的对象无法显示在图片上),把位置和大小大小尺寸设好。然后在FORM1里建立一个TIME对象TIME1,把其ENABLED属性设为TRUE, INTERVAL属性设为10;并在事件ONTIME里键入如下语句:3vSLinux联盟
3vSLinux联盟
procedure TForm1.Timer1Timer(Sender: TObject);3vSLinux联盟
begin3vSLinux联盟
  if statictext1.left< dbimage1.width+dbimage1.left   then3vSLinux联盟
  statictext1..left:=statictext1.left+33vSLinux联盟
  else3vSLinux联盟
  statictext1.left:=dbimage1.left;3vSLinux联盟
  
//当标题飞出图片后,使标题重新位于图片的左边,3vSLinux联盟
     再一次从左向右入屏幕3vSLinux联盟
end;
3vSLinux联盟
3vSLinux联盟
说明:3vSLinux联盟
3vSLinux联盟
   1. 如果只想使标题从左向右移动一次,ELSE语句改为Timer1.enabled:=false;3vSLinux联盟
   2. 数值3是标题移动的速度值,可以随意更改3vSLinux联盟
   3. 若标题只移到图片的某一位置,则把3vSLinux联盟
3vSLinux联盟
“statictext1.left< dbimage1.width+dbimage1.left”
改为3vSLinux联盟
“statictext1.left< 位置值”,并把ELSE语句改为Timer1.enabled:=false;
3vSLinux联盟
   4. 只需把LEFT的值从大变到小,则实现从右往左飞过3vSLinux联盟
   5. 把上面的LEFT改为TOP,把WIDTH改为HEIGHT,即可实现垂直方向的动画。3vSLinux联盟
3vSLinux联盟
六. 逐渐显示(即把图片从某一个边界逐渐拉出来)3vSLinux联盟
3vSLinux联盟
实现这一类型的动画不但要改变TOP、LEFT属性,还要改变HEIGHT和WIDTH属性。例:把一幅画从右边往左边拉(右切入)。在上例中以DBIMAGE1为例。这时要把Dbimage1的center和stretch属性设为FALSE。图片的左边界放在FORM1的右边界处,WIDTH设为0。3vSLinux联盟
3vSLinux联盟
procedure TForm1.timer1Timer(Sender: TObject);3vSLinux联盟
begin3vSLinux联盟
  if   dbimage1.left >0then3vSLinux联盟
  begin3vSLinux联盟
    dbimage1.left:=dbimage1.left-3;3vSLinux联盟
    dbimage1.width:=dbimage1.width+3;3vSLinux联盟
    
//LEFT的改变值与WIDTH的改变值必须一样3vSLinux联盟
        end3vSLinux联盟
  else3vSLinux联盟
  begin3vSLinux联盟
    dbimage1.left:=form1.width;3vSLinux联盟
    dbimage1.width:=0;3vSLinux联盟
  end;3vSLinux联盟
end;
3vSLinux联盟
3vSLinux联盟
说明:3vSLinux联盟
   1. 把上面的LEFT改为TOP,WIDTH改为HEIGHT即可实现从下往上拉(下切入)。3vSLinux联盟
   2. 若只切入到某一点,可以把3vSLinux联盟
“Dbimage1.left >0”
中的0改为设定点的坐标,并把ELSE 语句改为 3vSLinux联盟
Timer1.enabled:=false;
3vSLinux联盟
3vSLinux联盟
   尽管DELPHI提供了不少关于动画方面的开发工具,但是只要稍稍修改一下属性即可轻轻松松地实现常见的一些特技显示,你愿意试一下吗?3vSLinux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·Delphi实现远程串口的数据采集  (2007-10-30 16:10:39)
 ·Delphi托盘编程实战演练  (2007-10-30 16:09:56)
 ·DELPHI中操作ACCESS技巧集  (2007-10-30 16:08:48)
 ·在DELPHI中打印TDBGrid内容  (2007-10-30 16:05:41)
 ·在Delphi 2005中安装组件  (2007-10-30 16:04:02)
 ·DELPHI组件安装全攻略  (2007-10-30 15:54:19)
 ·Delphi中树型控件的使用技巧  (2007-10-30 15:41:50)
 ·在DELPHI中用线程排序  (2007-10-30 15:41:06)
 ·Delphi的嵌入式asm: Byte快速转换为16进制  (2007-10-30 15:40:20)
 ·创建一个简单的Delphi专家  (2007-10-30 15:14:08)