38、Visual Basic开发工具应用指南

Visual Basic开发工具应用指南

在Visual Basic编程中,有几个实用的应用程序能帮助我们更好地控制编程环境,提升开发效率。下面将详细介绍ColorBar应用程序和APIAddin应用程序。

1. ColorBar应用程序

ColorBar应用程序虽简单,但在调整显示器颜色和亮度平衡方面非常实用,同时还展示了一些有用的编程技巧。

1.1 运行效果

运行ColorBar时,会看到一个填充了16个矩形的窗体,每个矩形包含QBColor函数定义的16种原色之一。要确保黄色块看起来不是棕色,且每种颜色都与其他颜色明显区分,比如能看到两种不同深浅的灰色。用鼠标左键点击窗体可使颜色块按一个方向旋转,右键点击则按另一个方向旋转,任一方向点击16次后,颜色块会回到原始位置。

1.2 窗体细节
  • MinButton属性 :设置为False以防止错误情况。因为当窗体最小化为图标时,Scale语句会产生错误,且该实用程序在最小化状态下作用不大,所以去掉了最小化按钮选项。不过,即使该属性设置为False,按钮仍可见,但呈灰色且不可用。
  • 定时器控制 :窗体上唯一的控件是定时器。最初将块绘制代码放在窗体的Paint事件过程中,拉伸窗体时能正常触发Paint事件,但缩小窗体时该事件不被调用。为解决此问题,在程序中需要重绘颜色块的地方激活定时器。定时器设置为一次性事件,即其代码激活一次后自动关闭,通过在Resize事件中设置定时器的Enabled属性为True,可在窗体大小改变或鼠标点击旋转颜色块顺序时重绘颜色块。
1.3 创建步骤

以下是创建ColorBar应用程序所需的对象和属性设置,以及源代码:

Property Value
Form - Name frmColorBar
Form - Caption ColorBar
Form - MinButton False
Form - Icon Monitr01.ico
Timer - Name tmrDrawBars
Timer - Interval 1
Option Explicit
Dim mintColorShift As Integer

Private Sub Form_Load()
    `Center form on screen
    Me.Left = (Screen.Width - Me.Width) \ 2
    Me.Top = (Screen.Height - Me.Height) \ 2
End Sub

Private Sub Form_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
    `Shift color bars based on mouse button
    mintColorShift = (mintColorShift - Button * 2 + 19) Mod 16
    `Activate timer to draw color bars
    tmrDrawBars.Enabled = True
End Sub

Private Sub Form_Resize()
    `Activate timer to draw color bars
    tmrDrawBars.Enabled = True
End Sub

Private Sub tmrDrawBars_Timer()
    Dim intX As Integer
    Dim intY As Integer
    `Deactivate timer so that color bars are drawn only once
    tmrDrawBars.Enabled = False
    `Scale form for convenience
    Scale (4, 4)-(0, 0)
    `Fill in colors
    For intX = 0 To 3
        For intY = 0 To 3
            mintColorShift = (mintColorShift + 1) Mod 16
            Line (intX, intY)-(intX + 1, intY + 1), _
                QBColor(mintColorShift), BF
        Next intY
    Next intX
End Sub
2. APIAddin应用程序

APIAddin应用程序是Visual Basic开发环境的一个插件,它提供了一个插件的实际示例,并且其API声明的结构比WIN32API.TXT文件中的信息展示方式更好。

2.1 运行效果

安装该插件后,可直接从“Add-Ins”菜单访问其创建的对话框,能快速轻松地定位API函数,并将其复制粘贴到应用程序中。

2.2 转换WIN32API.TXT文件

在使用APIAddin应用程序之前,需要将原始的WIN32API.TXT文件修改为三个新的工作文件,该转换过程只需执行一次。以下是转换代码:

Option Explicit

Private Sub Form_Click()
    Dim strA As String
    Dim strT As String
    Dim intState As Integer
    Dim intI As Integer
    Dim intJ As Integer
    Dim intK As Integer
    Dim intN As Integer
    Print "WorkingDear John, How Do I... "
    Open App.Path & "\Win32api.txt" For Input As #1
    Open App.Path & "\W32cons.txt" For Output As #2
    Open App.Path & "\W32type.txt" For Output As #3
    Open App.Path & "\W32decl.txt" For Output As #4
    Do Until EOF(1)
        Line Input #1, strA
        If InStr(strA, "Const ") Then intState = 2
        If InStr(LTrim(strA), "Type ") = 1 Then
            strA = "Private " & strA
            intState = 3
        End If
        If InStr(LTrim(strA), "Declare ") = 1 Then
            intState = 4
        End If
        If intState = 2 Then
            intI = InStr(strA, "`")
            If intI > 0 Then
                strA = Trim(Left(strA, intI - 1))
            End If
            If strA <> "" Then
                intI = InStr(strA, "Public")
                If intI = 1 Then
                    Print #2, strA
                Else
                    Print #2, "Private " & strA
                End If
            End If
        End If
        If intState = 3 Then
            If Left(strA, 1) = " " Then
                strA = Space(4) & Trim(strA)
            End If
            intJ = InStr(strA, "`")
            If intJ > 0 Then
                strA = RTrim(Left(strA, intJ - 1))
            End If
            Print #3, strA
        End If
        If intState = 4 Then
            intN = 2
            If Trim(strA) = "" Then
                Print #4, ""
            Else
                `Lop off comments
                intI = InStr(strA, ")")
                intJ = InStr(intI, strA, "`")
                If intJ > intI Then strA = Trim(Left(strA, intJ - 1))
                `Drop Alias if not different from original function
                intI = InStr(strA, "Alias")
                If intI Then
                    intJ = InStr(intI, strA, Chr(34))
                    intK = InStr(intJ + 1, strA, Chr(34))
                    strT = Mid(strA, intJ + 1, intK - intJ - 1)
                    strT = Space(1) & strT & Space(1)
                    If InStr(strA, strT) Then
                        strA = Left(strA, intI - 1) & _
                            Mid(strA, intK + 1)
                    End If
                End If
                `Locate "Lib"
                intI = InStr(strA, " Lib")
                `Insert "Private"
                Print #4, "Private Declare " & _
                    Mid(strA, 9, intI - 8) & "_"
                strA = Mid(strA, intI + 1)
                `Locate left parenthesis
                intI = InStr(strA, "(")
                Print #4, Left(strA, intI) & " _"
                strA = Mid(strA, intI + 1)
                `Locate each parameter
                Do
                    intI = InStr(strA, ", ")
                    If intI = 0 Then Exit Do
                    Print #4, Space(4) & Left(strA, intI) & " _"
                    intN = intN + 1
                    strA = Mid(strA, intI + 2)
               Loop; 
                `Locate right parenthesis
                intI = InStr(strA, ")")
                    Print #4, Space(4) & Left(strA, intI - 1) & " _"
                Print #4, Mid(strA, intI)
            End If
        End If
        If intState = 2 Then intState = 0
        If intState = 3 And InStr(strA, "End Type") > 0 Then
            intState = 0
            Print #3, ""
        End If
        If intState = 4 Then
            intState = 0
            Print #4, ""
        End If
    Loop
    Close #1
    Close #2
    Close #3
    Close #4
    Print "Done"
End Sub

运行上述代码后,WIN32API.TXT文件将被拆分为三个文件:W32CONS.TXT包含所有常量列表,W32TYPE.TXT包含所有UDT结构定义,W32DECL.TXT包含所有API函数声明。程序会去除所有多余的注释和空行,添加Private声明以最小化声明范围。

2.3 构建APIAddin应用程序

构建APIAddin应用程序的步骤如下:
1. 启动一个新项目,在“New Project”对话框中双击“Addin”图标,创建一个几乎完整的应用程序,包含一个窗体和一个插件设计器。
2. 将自动创建并命名的窗体重命名为frmAPIAddin,保存为APIADDIN.FRM;将Connect设计器保存为CONNECT.DSR;将项目命名为APIAddin,保存为APIADDIN.VBP。

以下是CONNECT.DSR的源代码:

Option Explicit
Public FormDisplayed          As Boolean
Public VBInstance             As VBIDE.VBE
Dim mcbMenuCommandBar         As Office.CommandBarControl
Dim mfrmAPIAddin              As New frmAPIAddin
Public WithEvents MenuHandler As CommandBarEvents

Sub Hide()
    On Error Resume Next
    FormDisplayed = False
    mfrmAPIAddin.Hide
End Sub

Sub Show()
    On Error Resume Next
    If mfrmAPIAddin Is Nothing Then
        Set mfrmAPIAddin = New frmAPIAddin
    End If
    Set mfrmAPIAddin.VBInstance = VBInstance
    Set mfrmAPIAddin.Connect = Me
    FormDisplayed = True
    mfrmAPIAddin.Show
End Sub

`------------------------------------------------------
`This method adds the add-in to VB
`------------------------------------------------------
Private Sub AddinInstance_OnConnection(ByVal Application As Object, _
    ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
    ByVal AddInInst As Object, custom() As Variant _
)
    On Error GoTo error_handler
    `Save the VB instance
    Set VBInstance = Application
    `This is a good place to set a breakpoint and
    `test various add-in objects, properties, and methods
    Debug.Print VBInstance.FullName
    If ConnectMode = ext_cm_External Then
        `Used by the wizard toolbar to start this wizard
        Me.Show
    Else
        Set mcbMenuCommandBar = AddToAddInCommandBar("API Addin")
        `Sink the event
        Set Me.MenuHandler = _
            VBInstance.Events.CommandBarEvents(mcbMenuCommandBar)
    End If
    If ConnectMode = ext_cm_AfterStartup Then
        If GetSetting(App.Title, "Settings", _
            "DisplayOnConnect", "0") = "1" Then
            `Set this to display the form on connect
            Me.Show
        End If
    End If
    Exit Sub

error_handler:
    MsgBox Err.Description
End Sub

`------------------------------------------------------
`This method removes the add-in from VB
`------------------------------------------------------
Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode _
    As AddInDesignerObjects.ext_DisconnectMode, _
    custom() As Variant _
)
    On Error Resume Next
    `Delete the command bar entry
    mcbMenuCommandBar.Delete
    `Shut down the add-in
    If FormDisplayed Then
        SaveSetting App.Title, "Settings", "DisplayOnConnect", "1"
        FormDisplayed = False
    Else
        SaveSetting App.Title, "Settings", "DisplayOnConnect", "0"
    End If
    Unload mfrmAPIAddin
    Set mfrmAPIAddin = Nothing
End Sub

Private Sub IDTExtensibility_OnStartupComplete(custom() As Variant)
    If GetSetting(App.Title, "Settings", _
        "DisplayOnConnect", "0") = "1" Then
        `Set this to display the form on connect
        Me.Show
    End If
End Sub

`This event fires when the menu is clicked in the IDE
Private Sub MenuHandler_Click(ByVal CommandBarControl As Object, _
    handled As Boolean, CancelDefault As Boolean _
)
    Me.Show
End Sub

Function AddToAddInCommandBar(sCaption As String) As _
    Office.CommandBarControl
    Dim cbMenuCommandBar As Office.CommandBarControl  `command bar object
    Dim cbMenu As Object
    On Error GoTo AddToAddInCommandBarErr
    `See if we can find the Add-Ins menu
    Set cbMenu = VBInstance.CommandBars("Add-Ins")
    If cbMenu Is Nothing Then
        `Not available, so we fail
        Exit Function
    End If
    `Add it to the command bar
    Set cbMenuCommandBar = cbMenu.Controls.Add(1)
    `Set the caption
    cbMenuCommandBar.Caption = sCaption
    Set AddToAddInCommandBar = cbMenuCommandBar
    Exit Function

AddToAddInCommandBarErr:
End Function

APIADDIN.FRM的对象和属性设置如下:

ID No.* Property Value
Form Name frmAPIAddin
Form Caption Win32 APIs
Form BorderStyle 3 - Fixed Dialog
OptionButton - 1 Name optAPI
OptionButton - 1 Caption Constants
OptionButton - 1 Index 0
OptionButton - 2 Name optAPI
OptionButton - 2 Caption Types
OptionButton - 2 Index 1
OptionButton - 3 Name optAPI
OptionButton - 3 Caption Declarations
OptionButton - 3 Index 2
RichTextBox - 4 Name rtfAPI
RichTextBox - 4 HideSelection False
RichTextBox - 4 Scrollbars 3 - rtfBoth
TextBox - 5 Name txtFind
CommandButton - 6 Name cmdFind
CommandButton - 6 Caption FindDear John, How Do I…
CommandButton - 7 Name cmdCopy
CommandButton - 7 Caption Copy

以下是APIADDIN.FRM的源代码:

Option Explicit
Public VBInstance As VBIDE.VBE
Public Connect As Connect
Private mstrCon As String
Private mstrTyp As String
Private mstrDec As String

Private Sub cmdCopy_Click()
    `Copy selected text to clipboard
    Clipboard.SetText rtfAPI.SelText
    `Return to user's project
    Unload Me
End Sub

Private Sub cmdFind_Click()
    Dim lngPtr As Long
    Dim strFind As String
    `Put focus on rich text box
    rtfAPI.SetFocus
    `Grab search string
    strFind = txtFind.Text
    `Determine where to begin search
    If rtfAPI.SelLength Then
        lngPtr = rtfAPI.SelStart + rtfAPI.SelLength
    Else
        lngPtr = 0
    End If
    `Use rich text box's Find method
    lngPtr = rtfAPI.Find(strFind, lngPtr)
    If lngPtr = -1 Then
        MsgBox "Search text not found"
    End If
End Sub

Private Sub Form_Load()
    `Startup showing declarations
    optAPI(2).Value = True
    txtFind.Text = ""
    Me.Show
    Me.ZOrder
End Sub

Private Sub optAPI_Click(Index As Integer)
    Select Case Index
    `Constants
    Case 0
        If mstrCon = "" Then
            LoadUp mstrCon, "W32cons.txt"
        End If
        rtfAPI.Text = mstrCon
    `Type structures
    Case 1
        If mstrTyp = "" Then
            LoadUp mstrTyp, "W32type.txt"
        End If
        rtfAPI.Text = mstrTyp
    `Declarations
    Case 2
        If mstrDec = "" Then
            LoadUp mstrDec, "W32decl.txt"
        End If
        rtfAPI.Text = mstrDec
    End Select
End Sub

Private Sub LoadUp(sA As String, sFile As String)
    Open App.Path & "\" & sFile For Binary As #1
    sA = Space(LOF(1))
    Get #1, , sA
    Close #1
End Sub

Private Sub rtfAPI_SelChange()
    If rtfAPI.SelLength Then
        cmdCopy.Enabled = True
    Else
        cmdCopy.Enabled = False
    End If
End Sub

Private Sub txtFind_Change()
    If Len(txtFind.Text) Then
        cmdFind.Enabled = True
    Else
        cmdFind.Enabled = False
    End If
End Sub
2.4 编译插件

在编译APIAddin插件之前,需确保启用对Microsoft Visual Basic 6.0 Extensibility和Microsoft Office 8.0 Object Library的引用。具体步骤如下:
1. 从“Project”菜单中选择“References”,在“References”对话框中验证这些项目是否被选中。
2. 插件是一个ActiveX组件,可创建为动态链接库(DLL)或EXE文件,大多数情况下选择创建ActiveX DLL。从“Project”菜单中选择“APIAddin Properties”,在“Project Properties”对话框中验证“Project Type”是否设置为“ActiveX DLL”。
3. 从“File”菜单中选择“Make APIADDIN.DLL”进行编译,将生成的APIADDIN.DLL文件保存到与三个API文本文件相同的目录中。
4. 测试APIAddin插件:启动一个新的Standard EXE项目,从“Add-Ins”菜单中选择“Add-In Manager”,在对话框中勾选新的“API Add-In”项,点击“OK”。再次打开“Add-Ins”菜单,选择“API Addin”菜单选项,应能看到新的Win32 APIs对话框。在对话框中,可点击顶部的三个选项按钮查看不同类型的API数据列表,在底部文本框中输入要查找的文本并点击“Find”按钮进行查找,找到所需内容后高亮显示并点击“Copy”按钮,对话框将消失,可将选中的文本粘贴到项目中。

通过以上介绍,我们了解了ColorBar应用程序和APIAddin应用程序的功能、创建步骤和使用方法,这些工具能帮助我们更好地进行Visual Basic编程。

Visual Basic开发工具应用指南

3. 工具应用总结与对比

为了更清晰地了解ColorBar应用程序和APIAddin应用程序的特点和用途,我们对它们进行一个总结和对比。

应用程序 主要功能 使用场景 关键代码元素
ColorBar 调整显示器颜色和亮度平衡,展示编程技巧 开发过程中校准显示器颜色 mintColorShift变量、Timer控件事件处理
APIAddin 作为Visual Basic开发环境插件,提供API函数声明、常量和类型信息 开发需要调用Windows 32 - bit API函数的应用程序 转换WIN32API.TXT文件、RichTextBox控件使用

从使用场景来看,ColorBar主要用于前期的环境准备和调试,确保开发人员看到的颜色与用户一致。而APIAddin则在开发过程中直接提供了便利,帮助开发人员快速获取和使用API相关信息。

下面是一个mermaid流程图,展示了使用这两个工具的大致流程:

graph LR
    A[开始开发] --> B{是否需要校准显示器颜色}
    B -- 是 --> C[使用ColorBar应用程序]
    B -- 否 --> D{是否需要调用Windows 32 - bit API}
    C --> D
    D -- 是 --> E[使用APIAddin应用程序]
    D -- 否 --> F[正常开发]
    E --> F
    F --> G[完成开发]
4. 常见问题及解决方法

在使用ColorBar和APIAddin应用程序时,可能会遇到一些常见问题,以下是这些问题及对应的解决方法:

4.1 ColorBar应用程序
  • 问题1:颜色显示异常
    • 现象 :黄色块看起来像棕色,或者颜色区分不明显。
    • 解决方法 :检查显示器设置,确保显示器处于正常工作状态。同时,检查ColorBar应用程序的代码,确保QBColor函数使用正确。
  • 问题2:窗体最小化后出现错误
    • 现象 :窗体最小化后,再次恢复时出现错误。
    • 解决方法 :由于代码中已经将MinButton属性设置为False,确保代码没有被意外修改。如果问题仍然存在,检查其他可能影响窗体状态的代码。
4.2 APIAddin应用程序
  • 问题1:无法找到转换后的文件
    • 现象 :APIAddin应用程序无法加载W32CONS.TXT、W32TYPE.TXT和W32DECL.TXT文件。
    • 解决方法 :确保这三个文件与APIAddin应用程序的可执行文件在同一目录下,并且文件名正确。可以通过检查App.Path属性来确认文件路径。
  • 问题2:编译插件时出现引用错误
    • 现象 :编译APIAddin插件时,提示找不到Microsoft Visual Basic 6.0 Extensibility或Microsoft Office 8.0 Object Library的引用。
    • 解决方法 :从“Project”菜单中选择“References”,在“References”对话框中勾选这两个项目。如果仍然找不到,可能需要重新安装相关的库文件。
5. 进一步优化建议

为了让ColorBar和APIAddin应用程序更加完善,我们可以考虑以下优化建议:

5.1 ColorBar应用程序
  • 增加更多颜色模式 :除了现有的16种原色,还可以添加其他颜色模式,如RGB颜色模式,以满足不同的校准需求。
  • 保存校准设置 :允许用户保存当前的校准设置,下次启动应用程序时自动加载。
5.2 APIAddin应用程序
  • 支持模糊搜索 :在查找API函数时,支持模糊搜索功能,提高查找效率。
  • 添加收藏功能 :允许用户将常用的API函数、常量和类型信息添加到收藏列表中,方便快速访问。

通过以上的总结、问题解决和优化建议,我们可以更好地使用ColorBar和APIAddin应用程序,提高Visual Basic编程的效率和质量。在实际开发过程中,不断探索和改进这些工具,将有助于我们更加轻松地完成各种开发任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值