大家知道,无论做什么事情,如果闭门造车,很难会取得一些突破性的成就。笔者一直是一位忠实的编程爱好者,在这方面体会尤深,有时为了实现一个功能模块,常常一个人绞尽脑汁,最后的结果往往很难令人满意。为此,笔者认为大家应该集思广益,多看一些实践性强的编程方面的技巧,以次来开阔自己的编程思路。今天,笔者在这里就以Visual
Basic为例,来向大家提供一些VB在编程中的小应用、小技巧,希望这些内容能对大家有所帮助。
1、避免程序被多次调用
为了保护自己的“劳动成果”,许多编程用户常常会在程序中添加一些程序保护功能模块,以防止程序被其他用户非法调用或者多次调用。下面的功能代码就是用来防止自己的VB应用程序,被别人通过多次双击图标而重复调用用的,大家可以把它直接复制到自己的VB程序中,来增强程序的保护功能:
Private Sub Form_ Load
if app.previnstance then
msgbox ″不要同时调用多个程序,以免造成系统资源不足。″
//提示用户不能多次调用
end if
End Sub
2、新建一个椭圆形的窗口
如果我们想在程序界面中创建一个椭圆形的窗口,那该怎么办呢?通常采用的方法是利用VB中的Windows
API函数来实现的。首先,我们应该使用VB中的API文本查看器将下列API函数加入窗体的通用代码中:
Private Declare Function CreateEllipticRgn Lib ″gdi32″(ByVal
X1 As Long,ByVal Y1 As Long,ByVal X2 As Long,ByVal Y2 As Long)As Long //Windows
API函数
Private Declare Function SetWindowRgn Lib ″user32″(ByVal hWnd As Long,ByVal hRgn
As Long,ByVal bRedraw As Boolean)As Long
然后在Form_Load()窗体中加入如下代码,这些代码可以创建一个椭圆形状的窗口:
Private Sub Form_Load()
Show
SetWindowRgn hWnd,CreateEllipticRgn(10,10,250,180),True
End Sub
3、使用DBGrid来控制数据库的列宽
现在有很多数据库软件是用VB来开发的,而且其中有许多开发细节令人回味。例如在数据库中,如何实现为不同的列设置不同的宽度?大家可以使用下面的代码来实现:
Form_Activate()
DBGrid1.Columns(0).Width=500 ′为第1列设置宽度
DBGrid1.Columns(1).Width=600 ′为第2列设置宽度
DBGrid1.Columns(2).Width=300 ′为第3列设置宽度
……
……
DBGrid1.Columns(n).Width=800 ′为第n列设置宽度
End Sub
4、实现客户端的下载功能
如果希望客户端下载某个代码部件,则首先要将该部件包装成CAB文件。例如,用VB生成了一个ActiveXDLL—MyDLL.DLL,它只有一个叫MyClass的类,其唯一的方法是显示LogIn对话框。用SetupWizard包装这个部件,生成了CAB文件。下面的代码将实现在客户端下载MYDLL.CAB:
<OBJECTID=MyClass> //ObjectID是这个ActiveXDLL中某个类的名字
CLASSID=“CLSID:503B3E09-2191-11D2-8E90-00104B64F7B7”
CODEBASE=“mydll.cab>”
</OBJECT>
<INPUTTYPE=buttonVALUE=“LogInNOW”NAME=“BtnLogin”>
<!-
Whenthebuttonisclicked,callthe“LogIn”method.
-->
<SCRIPTlanguage=“VBScript”>
<!-
SubWindow_OnLoad
MyClass.Login //调用MyClass类的方法LogIn
EndSub
SubBtnLogic_OnClick()
MyClass.Login
EndSub
-->
</Script>
5、实现屏幕滚屏保护效果
我们可以使用VB来实现一种特效屏保,下面的一段代码就是实现画面在漆黑的背景屏幕里滚动的效果,其设计思路是将整屏画面抓到一个窗体内,而将另一个窗体的背景置黑,首先创建两个窗体forml和form2,置AutoRedraw属性为True,BorderStyle属性为None(无边框),将form2的Backcolor置为黑色。在forml中编制程序如下:
Dim ScreenhWnd%,ScreenDC%,rc% //Windows API函数
Declare Function BitBlt% Lib "GDI"(ByVal hDestDC%,ByVal dx%,ByVal dy%,ByVal
nWidth%,ByVal nHeight%,ByVal hSrcDC%,ByVal sx%,ByVal sy%,By Val dwRop&)
Declare Function GetDesktopWindow% Lib "USER" ()
Declare Function GetDC% Lib "USER" (ByVal hWnd%)
Declare Function ReleaseDC% Lib "USER" (ByVal hWnd%,ByVal hDC%)
Sub Form-Load
form1Width=ScreenWidth //form1窗体大小、位置与屏幕重合
form1Height=ScreenHeight
form1left=0
form1top=0
form2Width=ScreenWidth //form2窗体大小、位置与屏幕重合
form2Height=ScreenHeight
form2left=0
form2top=0
ScreenhWnd%=GetDesktopWindow%() //将整屏画面抓到form1中
ScreenDC%=GetDC%(ScreenhWnd%)
rc%=BitBlt%(form1hDC,0,0,form1ScaleWidth,form1ScaleHeight,
ScreenDC%,0,0,&HCC0020)
rc%=ReleaseDC%(ScreenhWnd%,ScreenDC%)
form2Show //显示form1和form2
form1Show
While True //上下移动form1
form1Top=form1Top + 500 //500为移动速度
if form1Top>ScreenHenght Then
//超出屏幕下界时回到最上面
form1Top=-ScreenHeight
End if
DoEvents //响应其它事件
Wend
End Sub
Sub Form-MouseDown() //点击鼠标结束滚幕
End
End Sub
6、关闭隐藏的应用程序
有时我们发现在关闭最后一个可见窗口时仍有隐藏窗口存在,表面上看应用程序都已经被关闭了,可实际上却仍在继续运行,为了能将所有隐藏窗口都关闭为止最好的办法是确保所有的窗体都已卸载,可以使用Forms集合和Unload语句。例如在主窗体上可以用一个名为cmdQuit的命令按钮来退出程序,如果应用程序只有一个窗体,则Click事件过程可简单为:Private
Sub cmdQuit_Click() UnloadMe End
Sub如果应用程序使用多窗体,通常把代码放入主窗体的Unload事件过程可以卸载这些窗体。可以使用Forms集合确保找到并关闭所有窗体。
Private Sub Form_Unload
Dim i as Integer //在窗体集合中循环并卸载每个窗体
For i=0 to Forms.Count-1
Unload Forms(i)
Next
End Sub