《中职电子与信息:标题栏也能玩特技.docx》由会员分享,可在线阅读,更多相关《中职电子与信息:标题栏也能玩特技.docx(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、标题栏也能玩特技绝大多数软件都少不了标题栏,若能给它添加一些特技,利用视觉效果来吸引用户,那将会给软件增 色不少。笔者经过反复实践,探索出4类8种标题栏特技。这些方法适用于各种可视化编程工具,现以 VB为例,将其介绍给各位cfans。一.标题栏特技一一滚动篇.右滚动在Timer事件中,利用Space函数在标题栏正文(以下简称为正文)前不断添加空格,使正文不断向 右移动;当移出视线后,使正文前的空格数为0,这样又可以从左边推入,推入时用Right函数逐个截取 正文右边的字符,达到渐入的效果。1 .左滚动先在正文前加足N个空格,使正文刚好呈现在标题栏以外(假定正文字符数为M);然后在Timer事
2、件中,用Righl函数依次截取右边的N+M-1、N+M-2、N+M-3、2、I个字符作为标题内容,这样便形成 向左移动的效果;此后,又加足N个空格,重复以上动作。标题栏特技一一伸缩篇.右伸缩正文前始终无空格。在Timer事件中,给正文每两个字符间不断添加空格,形成向右伸出的效果:达 到一定程度后又不断减去空格,再形成缩回的效果。1 .左伸缩与上述方法类似,在Timer事件中,给正文每两个字符间不断添加空格,达到一定程度后乂不断减去 空格;但正文第一个字符前也要添加空格,并保证此空格数与添加空格后的正文字符数加起来始终等于标 题栏能容纳的字符数,这样就可实现标题向左伸缩的效果。2 .向两侧伸缩与
3、上述方法类似,只是控制好正文第一个字符前的空格数即可。三.标题栏特技一一闪烁篇.背景闪烁调用API函数FlashWindow让窗体在激活与非激活状态之间切换,使标题栏的背景色在灰色和蓝色之 间变换,从而达到背景闪烁的目的。该函数有两个参数:窗体句柄(hwnd,由窗体的hwnd属性提供)及 闪烁标志(blnvert)o如果blnvert为非零值,该函数每调用一次,窗体的状态就切换一次;如果bln vert 为零,则窗体一直处于激活状态,并不闪烁。所以,为了实现持续闪烁,应在Timer事件中以FlashWindow Me.hwnd, 1方式反复调用该函数。1 .正文闪烁在Timer事件中反复切换正
4、文,使之在空标题与指定标题之间变换即可;四.标题栏特技一一动画篇图标是标题栏的脸面。选好一组内容相近的图标(如,下面的范例程序中所用的4种表情脸面图), 在Timer事件中,用LoadPiclure函数不断改变窗体的Icon属性,从而达到动画效果。五.范例程序介绍(VB6.0)因篇幅所限,这则程序给出了 6种特技效果。程序中作了详细的注释,为了简化程序代码,多次用到 Hf函数,它可将5行的If-Else-Endlf结构缩减为1行。1.窗体设置窗体上安置一个定时器控件Timer),用于控制特技的节奏;并排安置具有6个元素的命令钮数组 Command 1,标题依次取为:图标动画、标题闪烁、标题滚动
5、、标题右伸缩、标题左伸缩、向两侧伸缩。 2.程序代码 Dim It As Byte按下的命令按钮的索引号Dim Cap As String 标题栏文字内容 Dim LAs Integer 标题栏能容纳的字符数Private Sub Form_Load()Form 1 .ScaleMode = CharacterL = Form 1 .ScalcWidth - 10End SubPrivate Sub Command l_Click(Index As Integer)It - IndexCap = Command 1 (It).Caption 窗体标题特技Form 1 .Caption = Ca
6、pTimer 1.Enabled = True 特技开始Timcrl.Interval = IIf(It = 0, 300, 100)End SubPrivate Sub Timer l_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 ItCase 0选图标动画N =
7、 IIf(N = 4, 1,N+ 1)Form I .Icon=LoadPicture(App.Path+V & N & .ico)Case 1 ,选标题闪烁Flash = Not FlashForm 1.Caption = IIf(Flash, Cap,)Case 2 选标题滚动Q = IIf(Q = L, 0. Q + 1/前空格数A=Right(C叩.Q)从右边截取Form I .Caption = Space(Q) + A 加前空格Case Else,选伸缩H = IIf(Back, H - 1,H+ 1后空格数IfH5 0rH 1 Then Back = Not BackA=,nFo
8、rk = I To Len(Cap),字符间加空格A = A + Mid(Cap, k, 1) + Space(H)Next kA=RTrim(A) 去掉右边多余的空格Select Case ItCase 3 选右伸缩Form 1 .Caption = ACase 4 ,选左伸缩Form 1 .Caption = Space(L - Lcn(A) + ACase 5 ,选中心伸缩Form l.Caption=Space(L/2-Len(A)/2)+AEnd SelectEnd SelectEnd Sub用程序绘制美丽的花花以其独具的自然美使人赏心悦目,因此也就成了真、善、美的化身,理想、希望、
9、幸福的象征!生 活中有了花就有了灵气,程序中若能“开”出花来,那就多了几份神奇!本文介绍的这段程序不仅能绘出 形状各异的花朵,而且还可以用静态、动态和旋转三种不同的效果呈现。一、基本思想数学中有三叶玫瑰线(方程为P=Asin(3B)、四叶玫瑰线(方程为P=Asin(2B)等曲线,这些曲线的极 坐标方程很简单,基本形式均为:P=Asin(nP),即任意一点的极半径P是角度B的函数:其直角坐标方 程为:x=Asin(n P )cos( 3 ), y =Asin(n B )sin( B )。在程序中控制角度B使其从0变化到2兀,描出极半径P所对应的点,这样就可以绘出漂亮的玫瑰线: 当然,n不同所描出
10、的曲线的形状也就不同。出于好奇,笔者又编写了一些方程,如:P =Asin(n B ) + 3 sin(3n B )、P =Asin(n B )exp(-k B )等等, 结果发现每种方程都能绘出形状各异的漂亮曲线。今介绍其中的六种,暂命名为:玫瑰线、玫瑰环、万寿 菊、大丽花、蓬蒿菊、令箭荷花。二、程序实现.算法简介如果在某事件中用循环控制角度B使其从0变化到2兀,则绘出的花是静态的。如果在计时器事件中 每次让B增加定的值,并画出对应的线段,则绘出的花是动态的。如果在计时器事件中加个时间因子, 即方程变为:x=Asin(nB)cos(B+l), y=Asin(nB)sin(B+t);不断改变1的
11、值,并对每一个I绘出B从0到2 人所对应的图形,则绘出的花就会旋转起来。如果在端点之间画线段,则绘出的花是空心的;如果从中心 画线段至端点,则绘出的花是实心的。1 .界面设计启动VB6.0,添加如卜控件:用于选择花型的组合框Combol (将前面的六种花名作为列表项)、用于 选择效果的组合框Combo2 (列表内容依次为:静态、动态和旋转)、用于改变n的滚动条HScrolll、用于 显示n的标签Labell、用于绘制动态效果的计时器Timerl、用于绘制旋转效果的计时器Timer2。2 .编写代码Dim k%, n!, Xo!, Yo!, A!. B!, t!, m!Sub Draw(Opti
12、onal t As Single = 0)If k = 3 Then 大丽花r = A* Sin(n * B) * Exp(-B /20)Elselfk Mod 3 = 2 Then 万寿菊和令箭荷花r = A * (Sin(n * B) + 3 * Sin(3 * n * B)Else 玫瑰线、玫瑰环、蓬蒿菊r = A * Sin(n * B)End Ifx = r * Cos(B + t)极坐标的直角坐标y = r * Sin(B + t)Ifk=3Then 从端点画线:空心Me.Line -(Xo + x, Yo + y)Else从窗口中心画线:实心Me.Line (Xo, Yo)-(X
13、o + x, Yo + y)End IfEnd SubPrivate Sub Form_Load()Me.Move 0, 0, Screen.Width, Screen.HeightCornbo2.ListIndex = 2 ,默认效果为静态Combo 1.Listindex = 0 默认花型为玫瑰线End SubPrivate Sub Combol_Click()变换花型HScrolll.Min = IIf(Combol.Listindex = 1, 15, 1)HScroIll.Max = IIf(Combo 1 .Listindex = 1,49, 10)HScroll I .Value
14、 = IIf(Combo 1 .Listindex = 1,31, 10) HScroll I _ChangeEncl SubPrivate Sub Conibo2_Click()变换效果HScroll l_ChangeEnd SubPrivate Sub HScroll l_Change()Xo = Mc.ScaleWidth / 2,窗口中心位置Yo = Me.ScaleHeight / 2k = Combo 1.Listindexn = HScroll 1 /IIf(k= 1, 10, 1)Label I .Caption = N= & nA = Yo * IIf(k Mod 3 = 2
15、, 0.25, 0.75)方程中的 Am = Hf(k = 3,6, IIf(k = 1, 10/n, 1)t = 0: B = 0Mc.ClsMe.ForeColor = QBColor(Rnd *6 + 9)Mc.PSct (Xo, Yo), vbBlack 将绘图点置于窗口中心Timer I.Enabled = FalseTimer2.Enabled = FalseSelect Case Combo2.ListindexCase 0静态For B = 0To 6.28 * m Step 0.01Draw,每次画一部分Next B彳盾环结束后画出完整花型Case 1 励态rimer 1.E
16、nabled = TrueCase 2 ,旋转Timer2.Enabled = TrueEnd SelectEnd SubPrivate Sub Timerl_Timcr(),动态B = B + 0.01 不断变换角度Draw,每次画一部分Encl SubPrivate Sub Timer2_Timer()旋转 t = t + 0.02,时间因子Me.Cls 清除前一次绘出的花型Me.PSet (Xo, Yo)将绘图点先置于窗口中心For B = 0 To 6.28 * m Step 0.01Drawl,每次画一部分Next B循环结束后画出完整花型End Sub三.运行程序运行时,组合框和滚
17、动条的不同组合可产生出近百种不同形状的花型,细心的读者可以一一去试; 感兴趣的话还可以自己编写一些类似的方程,加在本文的代码中,相信有更多奇异的花朵在向你召唤。静态图片的特技呈现马致明新疆师范大学物理系830054(电脑爱好者、2000年第20期)用图片特技来封装,不失为给软件、网页添彩、增色的好方法。笔者经过实践,用YB探索出5类近 20种简单易行的静态图片的特技呈现方法,此方法同样适用于VC、VEP等Visual Studio系列以及Delphi 等开发工具。其基本制作思路是:先将图片加载到一个不可见的图片框P2中,然后以此为图片源、以定 时器为节奏控制器,用PaintPicture方法将
18、其加载到另一个图片框P1中(P1和P2的大小与图片的实际大 小一致);随着加载方式的不同,形成了形态各异、动感极强的图片特技。具体制作方法如下:说明:以下程序片段中用到四个模块级变量:W、H分别为图片的宽度和高度,X、Y分别为取图位置 的X、Y坐标或所取区域的宽度和高度。一.图片特技变焦篇L推出从P2的中央取图并呈满P1图片框(放大);定时器每动作一次,重复以上动作并将取图区域向四周 扩大,这样便在P1中形成图片被推出的效果。当取完全图时,定时器停止工作。这种效果类似于摄像中 的变焦拍摄,动感很强。Private Sub Timer0_Timer()推出X = X-W/ 100: Y = Y-
19、H/ 100 初值 X=W/2、Y=H/2If X=0OrY=W/20rY=H/2 Then StoppedEnd Sub3.推拉将取图的区域从中央逐渐扩大到整个图片(推出),然后再逐渐缩至中央(拉近),如此反复重复就形 成了动感极强的推拉效果。Private Sub Timer2_Timer()推拉If Back ThenX = X + W / l(X): Y = Y + H / 1(X)IfX=W/20rY=H/2 Then Back = Not Back:Exit SubElseX = X-W/100:Y = Y-H/100If X = 0 Or Y = m And Y = n Then
20、 StoppedFori = 0To20Forj = 0 To 20Pl.PaintPiclure P2.Picture, i * m, j * n, t, i * m. j * n. X, YNext j, iEnd Sub.横向将P2中的图片沿纵向分成约20个区域;定时器每动作一次,从每个小区域中取出与图片同宽的一小 块并加载到P1中,每次将取图的高度加大,将形成百叶窗被打开的效果。For i = 0 To 20Pl.PaintPicture P2.Picture, 0, i * n, 0. i * n. W. Y 横向Next i.纵向将P2中的图片沿横向分成约20个区域;定时器每动作一
21、次,从每个小区域中取出与图片同高的一小 块并加载到P1中,每次将取图的宽度加大将可.For i = 0 To 20Pl.PaintPicturc P2.Picture, i * m, 0, i * m, 0, X, H 纵向Next i三.图片特技马赛克篇由随机函数控制取图的位置;定时器每动作一次,从P2中随机取图5()块以上(长宽约为原图的1) 并加载到P1中的相应位置上,当定时器动作100次以后,加载全图(用于加载随机函数未照顾到的极个 别区域)。Private Sub Timer4_Timer(),马赛克Dim i As Integer, m As Integer, n As Integ
22、er, xx As Integer, yy As IntegerStatic c As Integerc = c + 1If c 100 Then PI .PaintPicture P2.Picture, 0, 0: c = 0m = W/100:n = H/100For i = 1 To 50 + c * 10xx = Rnd * (W - m - 50)yy = Rnd * (H - n - 50)Pl.PaintPicturc P2.Picture, xx, yy, xx, yy, m. nNext iEnd Sub四.图片特技一一拉幕篇L从中央向左右两边拉从P2的中央开始取图并加载到P
23、1的相应位置,所取高度与P2同高;定时器每动作一次,将取图的 宽度增加一点,直到取完全图为止。Private Sub Timer5_Timer()拉幕X = X + WZ 100:Y = Y + H/100 初值为 0Pl.PaintPicture P2.Picture, W / 2 X, 0, W / 2 - X, 0, 2 * X, HIfX 0.51 * W Then Timer5.Enabled = FalseEnd Sub.从中央向四周拉从P2的中央取图并加载到Pl的相应位置;定时器每动作一次,将取图的宽度和高度增加一点,直到 取完全图为止。PI.PaintPicture P2.Pi
24、clure, W/2-X, H/2-Y,W/2-X, H/2-Y,2*X,2*Y.从四周向中央拉从P2的四个角开始取图;定时器每动作一次,将取图的宽度和高度增加一点,直到取完全图为止。Pl.PaintPicture P2.Picture, 0, 0, 0, 0, X, YPl.PaintPicture P2.Picture, W - X, 0, W - X, 0, X, YPI.PaintPicture P2.Picture, 0, H - Y, 0, H - Y, X, YPl.PaintPicture P2.Picture, W - X, H - Y, W - X, H - Y, X, Y
25、.其它拉幕法可用类似的方法形成右拉、左拉、上拉、下拉、从左右向中央拉、从中央向上下两边拉、从上下向中 央拉等等。五.图片特技滚动篇1.左滚从P2的左边开始取图并加载到P1的右边,所取高度与P2同高;定时器每动作一次,将取图的宽度 增加点,便可形成向左滚动的效果。如果呈现出的全图要静止在屏幕上,则当所取宽度与图片同宽时停 止定时器即可;如果让图片从左边滚出去,则全图呈现后从P2的右边继续取图并加载到P1的左边,每次 将取图的宽度缩小,直到为。时停止定时器。Private Sub Timcr6_Timer()滚动X = X + W / 200,初值为 0If X = W Then StoppedP
26、l.PaintPicture P2.Picture, W - X, 0, 0, 0, X, HEnd Sub.右滚、上滚、下滚工作机理与左滚相同,只是取图和放图的方位不同而已。2 .错位滚左右(或上下)两部分相向滚动,汇聚后停止滚动,合二为一。Pl.PaintPicture P2.Picture, W - X, 0, 0, 0, X, H / 2Pl.PaintPicture P2.Piclure, 0, H / 2, W - X, H / 2, X. H / 2六.范例程序说明本文提供的这则范例程序可实现以上7种特技(对应上面的TimerO到Timer6事件)。在窗体Form1 上,建立包含
27、推;II、拉近、推拉、百叶窗.、马赛克、拉幕、滚动等7个选项的菜单栏,名称统一取为“特 技”;用到的控件有七个定时器TimerO到Timcr6,两个图片框P1和P2。定时器的Interval属性置为1, 其它属性均在程序代码中设置。此外,当前目录下有名为1、2、3、4的四幅jpg格式的图片;菜单每选一次,图片变换一次。Dim W As Integer, H As IntegerDim X As Integer, Y As IntegerDim Back As BooleanPrivate Sub Form_Load(),设置固定属性Pl. AutoSize = TruePl.Left = ()
28、Pl.Top = 0P2.AutoSize = TrueP2.Visible = FalseResetEnd SubPrivate Sub Reset()重置有关变量及属性Back = FalseW = P2.WidlhH = P2.HeightForml.Width = WForm!.Height = H + 700咖菜单的高度Pl.Width = WPl.Heigh( = HStoppedEnd SubPrivate Sub Stopped。停止所有定时器Timed). Enabled = FalseTimer!.Enabled = FalseTimcr2. Enabled = False
29、Timer3.Enabled = FalseTimer4.Enablcd = FalseTimer5.Enabled = FalseTimer6.Enabled = FalseEnd SubPrivate Sub 特技_Click(Index As Integer)选择菜单Static n As Integern = n + 1If n 4 Then n =四幅图片不断变换P2.Picture = LoadPicture(n & .jpg)ResetPl.CisSelect Case IndexCaseO雎出X = W/2: Y = H/2FimcrO.Enablcd = TrueCase 1 ,拉近X = 0: Y = 0Tinier I .Enabled = TrueCase 2 雅拉X = W/2:Y=H/2Timer2.Enabled = TrueCase 3 ,百叶窗X = 0: Y = 0Timcr3.Enabled = TrueCase 4 马赛克,limcr4.Enabled = TrueCase 5 ,拉幕X = 0: Y = 0Timer5.Enabled = TrueCase 6 滚动X = 0Timer6.Enabled = TrueEnd SelectEnd Sub
限制150内