| 让标题栏能玩特技效果 |
|
|
| 马致明 中国电脑教育报 2001-09-06 |
绝大多数软件都少不了标题栏,若能给它添加一些特技,利用视觉效果来吸引用户,那将会给软件增色不少。笔者经过反复实践,探索出四类八种标题栏特技。这些方法适用于各种可视化编程工具,现以VB为例,将其介绍给各位编程爱好者。
滚动篇
1、右滚动
在Timer事件中,利用Space函数在标题栏正文(以下简称为正文)前不断添加空格,使正文不断向右移动;当移出视线后,使正文前的空格数为0,这样又可以从左边推入,推入时用Right函数逐个截取正文右边的字符,达到渐入的效果。
2、左滚动
先在正文前加足N个空格,使正文刚好呈现在标题栏以外(假定正文字符数为M);然后在Timer事件中,用Right函数依次截取右边的N+M-1、N+M-2、N+M-3、…2、1个字符作为标题内容,这样便形成向左移动的效果;此后,再加足N个空格,重复以上动作。
伸缩篇
1、右伸缩
正文前始终无空格。在Timer事件中,给正文每两个字符间不断添加空格,形成向右伸出的效果;达到一定程度后又不断减去空格,再形成缩回的效果。
2、左伸缩
与上述方法类似,在Timer事件中,给正文每两个字符间不断添加空格,达到一定程度后又不断减去空格;但正文第一个字符前也要添加空格,并保证此空格数与添加空格后的正文字符数加起来始终等于标题栏能容纳的字符数,这样就可实现标题向左伸缩的效果。
3、向两侧伸缩
与上述方法类似,只是控制好正文第一个字符前的空格数即可。
闪烁篇
1、背景闪烁
调用API函数FlashWindow使窗体在激活与非激活状态之间切换,使标题栏的背景色在灰色和蓝色之间变换,从而达到背景闪烁的目的。该函数有两个参数:窗体句柄(hwnd,由窗体的hwnd属性提供)及闪烁标志(bInvert)。如果bInvert为非零值,该函数每调用一次,窗体的状态就切换一次;如果bInvert为零,则窗体一直处于激活状态,并不闪烁。所以,为了实现持续闪烁,应在Timer事件中以“FlashWindow Me.hwnd,1”方式反复调用该函数。
2、正文闪烁
在Timer事件中反复切换正文,使之在空标题与指定标题之间变换即可。
动画篇
图标是标题栏的脸面。选好一组内容相近的图标(如下面范例程序中所用的有关火星的8幅图标),在Timer事件中,用LoadPicture函数不断改变窗体的Icon属性,从而达到动画效果。
范例程序
因篇幅所限,这则程序给出了6种特技效果。程序中作了详细的注释,为了简化程序代码,多次用到IIf函数,它可将5行的If-Else-EndIf结构缩减为1行。
1、窗体设置
窗体上设置一个定时器控件Timer1,用于控制特技的节奏,其Interval属性设置成100;并排设置具有6个元素的命令钮数组Command1,标题依次取为:图标动画、标题闪烁、标题滚动、标题右伸缩、标题左伸缩、向两侧伸缩。
2、程序代码
Dim It As Byte
′按下命令按钮的索引号
Dim Cap As String
′标题栏文字内容
Dim L As Integer
′标题栏能容纳的字符数
Private Sub Form_Load()
Form1.ScaleMode = Character
L = Form1.ScaleWidth - 10
End Sub
Private Sub Command1_Click(Index As Integer)
It = Index
Cap = Command1(It).Caption
′ "窗体标题特技"
Form1.Caption = Cap
Timer1.Enabled = True ′特技开始
End Sub
Private Sub Timer1_Timer()
Dim A As String
′动态呈现在标题栏中的文字
Static N As Byte ′要变换的图标名称
Static Flash As Boolean ′控制标题闪烁与否
Static Back As Boolean′控制标题的伸与缩
Static Q As Byte
′标题栏文字前面的空格数
Static H As Byte
′标题栏文字后面的空格数
Select Case It
Case 0 ′选图标动画
N = IIf(N 〉= 8, 1, N + 1)
Form1.Icon=LoadPicture(App.Path+"" && N && ".ico")
Case 1 ′选标题闪烁
Flash = Not Flash
Form1.Caption = IIf(Flash, Cap, "")
Case 2 ′选标题滚动
Q = IIf(Q 〉= L, 0, Q + 1) ′前空格数
A = Right(Cap, Q) ′从右边截取
Form1.Caption = Space(Q) + A
′加前空格
Case Else′选伸缩
H = IIf(Back, H - 1, H + 1)′后空格数
If H 〉 5 Or H 〈 1 Then Back = Not Back
A = ""
For k = 1 To Len(Cap)
′字符间加空格
A = A + Mid(Cap, k, 1) + Space(H)
Next k
A = RTrim(A)
′去掉右边多余的空格
Select Case It
Case 3
′选右伸缩
Form1.Caption = A
Case 4
′选左伸缩
Form1.Caption = Space(L - Len(A))+ A
Case 5
′选中心伸缩
Form1.Caption=Space(L/2-Len(A)/2)+A
End Select
End Select
End Sub |
|
|
|
|
 |
|
|
 |
|
|
|
|