|
所谓动画按钮是指同一个按钮能显示不同的画面。动画按钮对改进应用程序中用户的界面起到功不可没的作用。在Delphi中提供了位图按钮的构件,利用系统提供的属性可以轻松地实现动画按钮。以下是笔者总结出来的几种方法。
利用Vi si ble 属性
由于Delphi 的每个构件都有Visible 属性。因此只需利用这个属性使两个按钮交替显示即可实现按钮的动画。
具体实现如下:
1、在屏幕的适当位置放两个形状、大小一模一样的位图按钮,分别为BITBTN1和BITBTN2;
2、利用GLYPH 属性为两个按钮分别设置位图;
3、把BITBTN2的Visible 属性设置成False ;
4、在BITBTN1的OnMouseDown 事件中写下如下命令:bitbtn1.visible :=false ;
bitbtn2.visible :=true ;form1.bitbtn2mousedown(sender ,button
,shift ,3,5);//这句是该方法的关键语句。
按下BITBTN1按钮的同时用程序模拟按下BITBTN2按钮;form1是按钮所在的Form 的名字;
5、在BITBTN2的OnMouseUp 事件中写下如下命令:bitbtn2.visible :=false ;bitbtn1.visible
:=true ;
6、有时候将鼠标按下后并未松开鼠标,而是按住鼠标键的同时从按钮上移开,此时必须显示按钮BITBTN1,因此还必须在Form1的OnMousetUp
事件中添入如下语句:bitbtn3.visible :=false ;bitbtn1.visible :=true ;这种方法的优点是两个画面中不但位图可以不一样,连文字都可以不一样,因此文字的颜色也可以很方便地随意设置;缺点是按钮按下去时缺少凹进去的感觉。
利用位图的Lo ad Fro mFile
由于位图按钮中的图画是位图格式的,因此可以利用LoadFromFile 方法在鼠标按下去和弹起时改变位图文件。具体方法如下:
1、准备按钮的两个图像所对应的位图文件1.bmp 和2.bmp ;
2、在屏幕的适当位置设置按钮,并把GLYPH属性设置成1.BMP 的图像;
3、在按钮的OnMouseDown 事件中键入如下语句:bitbtn2.glyph .LoadFromFile(′2.bmp′);
4、在按钮的OnMouseUp 事件中键入如下语句:bitbtn2.glyph .LoadFromFile(′1.bmp′);显然这种方法要比第一种方法的效果更好,更简单。
利用N U M GLY P H 属性在BITBTN 构件中有一个NUMGLYPH 属性,利用它,系统可以把装入的GLYPH
等分成若干个位图,并在按钮的不同状态显示不同的位图,由此实现按钮的动画。其中第一幅位图显示在默认状态,第二幅位图显示在Enable 属性为False
时的状态,第三幅位图用于OnClick 状态,第四幅位图用于当按钮始终保持被按下的状态时使用(就像复选框的功能一样)。具体实现如下(在本例中只要求实现当按钮按下时按钮位图发生变化):
1、准备两幅大小一样的位图:1.bmp 和2.bmp ;
2、利用画图工具把1.bmp 文件和2.bmp 文件中的位图水平拼接起来,生成一个新的位图文件new.bmp。由于1.bmp
文件中的位图用在按钮默认状态,2.bmp 文件中的位图用于按钮按下后的状态,因此拼接后1.bmp 文件中的位图处于第一幅位图的位置,2.bmp
文件中的位图必须处于第三幅位图的位置,所以在拼接过程中1.bmp 与2.bmp 的位图中间要留出一个与位图大小一样的空白区(即第二个位图的位置要空出来);
3在Form 的适当位置设置一个BITBTN 构件,在GLYPH 属性上设置成NEW.BMP;
4、把NUMGLYPH 属性设置成3;
利用这种方法,不用编写任何的程序代码,即可实现当按钮按下后,按钮图像发生变化的动画效果。在使用这种方法时,要注意在GLYPH
属性中设置的位图的宽度=位图的高度×NUMG—LYPH。
如果在准备位图时只准备了一幅图像,而在NUMGLYPH 中把值设置成
3,系统会自动地把该位图三等分后再在不同的状态显示不同的图像。所以用这种方法实现位图的动画比较的方便。
利用Ti mer 构件
以上三种方法实现的动画按钮都是只有当按下按钮时,按钮的图像才发生变化。利用Ti mer 组件,不按下按钮也可以随意地改变按钮上的图像,具体方法如下:
1、在Form 中设置一个Ti mer1,并在适当位置设置一个位图按钮BITBTN1;2、在Ti mer1的OnTi
mer 事件中输入如下语句:if state thenbitbtn1.glyph .loadfromfile(′1.bmp′)else
bitbtn2.glyph .loadfromfile(′2.bmp′);state :=not state ;//STATE 为状态指示程序运行时,按扭上就轮流显示两幅图画。如果多准备一些位图文件,多设几个状态动感就更强。这种方法要注意Ti
mer1的Intervel 属性的值,太大了,动画效果不好;太小了有闪烁感。
(福建省邮电学校林颖350003)
|