VB实现文字“闪入”显示的特殊效果
对于编程爱好者来说,文字显示处理是软件开发过程中非常重要的内容,其显示效果对程序的界面效果影响很大。如果文字展示能打破陈规,有所创新,运用一些独特的方式,就能给用户耳目一新的感觉,从而增加节目的亲和力。针对Visual Basic编程,作者给出了文本“闪入”特殊显示效果的实现方法,希望能帮助读者拓宽思路。
1.实现原理及相关功能介绍
所谓文本的“闪入”,是指将要显示的文本分成两部分,每一部分的字符从程序界面的两端进入,最终显示出来。其实现原理是:对于一个要显示的字符串,人工确定每个字符之间的初始间隔距离。在显示过程中,距离对称显示并逐渐减小,直到达到默认的字符间距,从而实现字符串从界面两侧“闪入”的效果。在具体的编程实现中,首先需要使用SetTextCharacterExtra函数给要显示的字符串的每个字符加上间隔距离。第二种是在程序中添加一个定时器,每次定时器被触发时,用DrawTextEx显示一个字符。第三,在使用DrawTextEx函数时,将显示格式设置为DT_CENTER,在设置DRAWTEXTPARAMS函数的结构参数时,将其iLeftMargin和iRightMargin成员的值设置为“0”。
在程序实现过程中,需要声明和使用以下三个API函数,分别是:
1、SetTextCharacterExtra
将函数SetTextCharacterExtra Lib " gdi32 "别名" SetTextCharacterExtra "(ByVal hdc为Long,ByVal nCharExtra为Long)声明为Long
描述:该函数用于在绘制文本时指定字符串中字符之间的额外间距。参数hdc表示设备场景的句柄,nCharExtra表示字符之间要插入的额外空空间(使用设备场景的逻辑坐标系)。函数调用成功后,返回一个Long值,该值指的是之前这个设备场景的额外间距设置。
2、DrawTextEx
将函数DrawTextEx Lib“user 32”别名“DrawTextExA”(ByVal hDC为Long,ByVal lpsz为String,ByVal n为Long,lpRect为Rect,ByVal un为Long,lpDrawTextParams为DrawTextParams)声明为Long
参数hDC是要绘制的设备场景的句柄,lpsz是要绘制的文本字符串,n是要绘制的字符数。如果您想要绘制整个字符串(直到停止),您可以将此参数设置为-1。LpRect RECT,指定用于绘制的格式化矩形(在逻辑坐标中),un是标志位。决定了画图的形式,比如:DT_EDITCONTROL模拟一个多行编辑控件;DT_ENDELLIPSES会在字符串末尾显示省略号,如果矩形放不下的话。LpDRAWTEXTPARAMS是指向DRAWTEXTPARAMS结构的指针,该结构包含附加的格式信息。
二、实现代码
了解了实现原理和方法,就开始编程吧。首先启动Visual Basic生成单文档应用程序,在Form1上放置定时器控件启动定时器程序;放置三个Label控件,其中一个用于显示文本信息,另外两个分别作为启动文本显示和退出程序的按钮。最后,添加如下代码:
Option Explicit
'类型结构
私有类型tpeTextProperties
cbSize As Long
iTabLength As Long
iLeftMargin As Long
iright margin As Long
uiLengthDrawn As Long
结束类型
私有类型tpeRectangle
左等长
上等长
右等长
下等长
结束类型
常数
私有常数DT _ CENTER = & H1
私有常数DT_VCENTER = &H4
API声明
私有声明函数DrawTextEx Lib "user32 "别名" DrawTextExA" (ByVal hdc As Long、ByVal lpsz As String、ByVal n As Long、lpRect As tpeRectangle、ByVal un As Long、lpDrawTextParams As tpeTextProperties)Long
私有声明函数settextcharacter extra Lib " gdi32 "(ByVal hdc As Long、ByVal nCharExtra As Long)私有声明函数GetClientRect Lib " user32
整数形式的公共空间
Private Sub Form_Load()
'调用按钮代码,该代码执行
'我们在这里想要执行的功能。
调用cmdStart_Click
End Sub
private Sub cmdClose _ Click()
Unload frm main '从内存中卸载此窗体
End '结束程序
End Sub
private Sub cmdStart _ Click()
'绘制字符间有大空格的文本
strCharSpace = 240
调用doAnimationFX
'启动计时器
tmrProgTimer。Enabled = True
End Sub
private Sub tmrProgTimer _ Timer()
'取走间距的一个当前值
strCharSpace = strCharSpace-1
调用doAnimationFX '绘制新字符串
'检查' strCharSpace'
的值如果strCharSpace = 0则tmrProgTimer。Enabled = False
End Sub
private Sub doAnimationFX()
'过程范围声明
Dim typeDrawRect As tpeRectangle
Dim typedraw params As tpetext properties
Dim str caption As String
'设置将被动画显示的字符串
str caption = " Visual Basic Code "
'设置动画显示的区域。
”需要是一个具有。hwnd '属性
',可以很容易地刷新和清除。所以一个图片
'框是最好的候选者
GetClientRect picanirect . hwnd,typeDrawRect
'现在用typeDrawParams
'设置将在动画中使用的属性
'动画的大小
。cbSize = Len(typeDrawParams)
'左右边距
。iLeftMargin = 0
。iright margin = 0
End With
'清除图片框
picAniRect。Cls
'设置将要使用的字符间距
settextcharacter extra picAniRect . hdc,Val(strCharSpace)
'绘制文本字符串,在设置区域中使用
'指定的选项
DrawTextEx picAniRect.hdc,strCaption,Len(strCaption),_
typeDrawRect,SaveOptions,typeDrawParams
'刷新包含动画的图片框
refresh
End Sub
Private Function save options()As Long
' Procedure Scope Declaration
Dim my flags As Long
'设置将在FX
MyFlags = MyFlags或DT_CENTER
MyFlags = MyFlags或DT_VCENTER
'存储我们在上面设置的标志
save options = my flags
End Function
三。摘要
在本文中,作者只简单介绍了文本双侧对称“闪入”显示效果的原理、方法和实现代码。实际上,利用好上述功能还可以实现其他特殊显示,如文字的拖动显示效果等。不过由于篇幅有限,这里就不赘述了。感兴趣的读者和朋友可以通过电子邮件联系我((liutaomail@ah163.net)并索取相关代码。
0条评论