VB在编程中的几个细节应用

ZDNet软件频道 时间:2001-09-04 作者:飞雪 |  我要评论()
本文关键词:VB Visual Basic
今天,笔者在这里就以Visual Basic为例,来向大家提供一些VB在编程中的小应用、小技巧,

大家知道,无论做什么事情,如果闭门造车,很难会取得一些突破性的成就。笔者一直是一位忠实的编程爱好者,在这方面体会尤深,有时为了实现一个功能模块,常常一个人绞尽脑汁,最后的结果往往很难令人满意。为此,笔者认为大家应该集思广益,多看一些实践性强的编程方面的技巧,以次来开阔自己的编程思路。今天,笔者在这里就以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,BorderStyle属性为None(无边框),将form2的Backcolor置为黑色。在forml中编制程序如下:

Dim ScreenhWnd%,ScreenDC%,rc% //Windows API函数
Declare Function BitBlt% Lib "GDI"(ByVal hDestDC%,ByVal dx%,ByVal dy%,ByVal nWidth%,ByVal nHeight%,ByVal hSrcDC%,ByVal sx%,ByVal sy%,By Val dwRop&)

Declare Function GetDesktopWindow% Lib "USER" ()
Declare Function GetDC% Lib "USER" (ByVal hWnd%)
Declare Function ReleaseDC% Lib "USER" (ByVal hWnd%,ByVal hDC%)

Sub Form-Load
    form1Width=ScreenWidth //form1窗体大小、位置与屏幕重合
    form1Height=ScreenHeight
    form1left=0
    form1top=0
    form2Width=ScreenWidth //form2窗体大小、位置与屏幕重合
    form2Height=ScreenHeight
    form2left=0
    form2top=0

    ScreenhWnd%=GetDesktopWindow%() //将整屏画面抓到form1中
    ScreenDC%=GetDC%(ScreenhWnd%)
    rc%=BitBlt%(form1hDC,0,0,form1ScaleWidth,form1ScaleHeight,
    ScreenDC%,0,0,&HCC0020)
    rc%=ReleaseDC%(ScreenhWnd%,ScreenDC%)

    form2Show //显示form1和form2
    form1Show

    While True //上下移动form1
        form1Top=form1Top + 500 //500为移动速度
        if form1Top>ScreenHenght Then //超出屏幕下界时回到最上面
            form1Top=-ScreenHeight
        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


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134