You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
217 lines
6.5 KiB
217 lines
6.5 KiB
Attribute VB_Name = "modWizard"
|
|
Option Explicit
|
|
|
|
Global Const WIZARD_NAME = "WizardTemplate"
|
|
|
|
Declare Function WritePrivateProfileString& Lib "Kernel32" Alias "WritePrivateProfileStringA" (ByVal AppName$, ByVal KeyName$, ByVal keydefault$, ByVal FileName$)
|
|
|
|
'WinHelp 命令
|
|
Declare Function WinHelp Lib "user32" Alias "WinHelpA" (ByVal hwnd As Long, ByVal lpHelpFile As String, ByVal wCommand As Long, ByVal dwData As Long) As Long
|
|
Public Const HELP_QUIT = &H2 ' 终止帮助
|
|
Public Const HELP_CONTENTS = &H3& ' 显示索引/上下文
|
|
Public Const HELP_CONTEXT = &H1 ' 在 ulTopic 中显示标题
|
|
Public Const HELP_INDEX = &H3 ' 显示索引
|
|
|
|
Global Const APP_CATEGORY = "Wizards"
|
|
|
|
Global Const CONFIRM_KEY = "ConfirmScreen"
|
|
Global Const DONTSHOW_CONFIRM = "DontShow"
|
|
|
|
|
|
'--------------------------------------------------------------------------
|
|
'这个程序必须在立即窗口被执行
|
|
'它将添加条目到 VBADDIN.INI ,如果此文件不存在
|
|
'在下次加载 VB 时此外接程序将生效
|
|
'--------------------------------------------------------------------------
|
|
Sub AddToINI()
|
|
Debug.Print WritePrivateProfileString("Add-Ins32", WIZARD_NAME & ".Wizard", "0", "VBADDIN.INI")
|
|
End Sub
|
|
|
|
Function GetResString(nRes As Integer) As String
|
|
Dim sTmp As String
|
|
Dim sRetStr As String
|
|
|
|
Do
|
|
sTmp = LoadResString(nRes)
|
|
If Right(sTmp, 1) = "_" Then
|
|
sRetStr = sRetStr + VBA.Left(sTmp, Len(sTmp) - 1)
|
|
Else
|
|
sRetStr = sRetStr + sTmp
|
|
End If
|
|
nRes = nRes + 1
|
|
Loop Until Right(sTmp, 1) <> "_"
|
|
GetResString = sRetStr
|
|
|
|
End Function
|
|
|
|
Function GetField(sBuffer As String, sSep As String) As String
|
|
Dim p As Integer
|
|
|
|
p = InStr(sBuffer & sSep, sSep)
|
|
GetField = VBA.Left(sBuffer, p - 1)
|
|
sBuffer = Mid(sBuffer, p + Len(sSep))
|
|
|
|
End Function
|
|
|
|
Sub LoadResStrings(frm As Form)
|
|
On Error Resume Next
|
|
|
|
Dim ctl As Control
|
|
Dim obj As Object
|
|
|
|
'设置窗体的标题
|
|
If IsNumeric(frm.Tag) Then
|
|
frm.Caption = LoadResString(CInt(frm.Tag))
|
|
End If
|
|
|
|
'对菜单项使用 caption 属性,对其他控件
|
|
'使用 Tag 属性来设置控件的标题
|
|
For Each ctl In frm.Controls
|
|
If TypeName(ctl) = "Menu" Then
|
|
If IsNumeric(ctl.Caption) Then
|
|
If Err = 0 Then
|
|
ctl.Caption = LoadResString(CInt(ctl.Caption))
|
|
Else
|
|
Err = 0
|
|
End If
|
|
End If
|
|
ElseIf TypeName(ctl) = "TabStrip" Then
|
|
For Each obj In ctl.Tabs
|
|
If IsNumeric(obj.Tag) Then
|
|
obj.Caption = LoadResString(CInt(obj.Tag))
|
|
End If
|
|
'检查一条提示
|
|
If IsNumeric(obj.ToolTipText) Then
|
|
If Err = 0 Then
|
|
obj.ToolTipText = LoadResString(CInt(obj.ToolTipText))
|
|
Else
|
|
Err = 0
|
|
End If
|
|
End If
|
|
Next
|
|
ElseIf TypeName(ctl) = "Toolbar" Then
|
|
For Each obj In ctl.Buttons
|
|
If IsNumeric(obj.Tag) Then
|
|
obj.ToolTipText = LoadResString(CInt(obj.Tag))
|
|
End If
|
|
Next
|
|
ElseIf TypeName(ctl) = "ListView" Then
|
|
For Each obj In ctl.ColumnHeaders
|
|
If IsNumeric(obj.Tag) Then
|
|
obj.Text = LoadResString(CInt(obj.Tag))
|
|
End If
|
|
Next
|
|
Else
|
|
If IsNumeric(ctl.Tag) Then
|
|
If Err = 0 Then
|
|
ctl.Caption = GetResString(CInt(ctl.Tag))
|
|
Else
|
|
Err = 0
|
|
End If
|
|
End If
|
|
'检查一条提示
|
|
If IsNumeric(ctl.ToolTipText) Then
|
|
If Err = 0 Then
|
|
ctl.ToolTipText = LoadResString(CInt(ctl.ToolTipText))
|
|
Else
|
|
Err = 0
|
|
End If
|
|
End If
|
|
End If
|
|
Next
|
|
|
|
End Sub
|
|
|
|
'==================================================
|
|
'目的: 用翻译后内容代替资源文件字符串中
|
|
' <TOPIC_TEXT> 的相对位置中的字符串
|
|
'
|
|
'输入: sString = 用来搜索并且替代的字符串
|
|
' sReplacement = 代替被占据的字符串
|
|
' sReplacement2 = 代替被占据第二个字符串
|
|
'
|
|
'输出: 占据全部需替代位置的新的字符串
|
|
'==================================================
|
|
Function ReplaceTopicTokens(sString As String, _
|
|
sReplacement As String, _
|
|
sReplacement2 As String) As String
|
|
On Error Resume Next
|
|
|
|
Dim p As Integer
|
|
Dim sTmp As String
|
|
|
|
Const TOPIC_TEXT = "<TOPIC_TEXT>"
|
|
Const TOPIC_TEXT2 = "<TOPIC_TEXT2>"
|
|
|
|
sTmp = sString
|
|
Do
|
|
p = InStr(sTmp, TOPIC_TEXT)
|
|
If p Then
|
|
sTmp = VBA.Left(sTmp, p - 1) + sReplacement + Mid(sTmp, p + Len(TOPIC_TEXT))
|
|
End If
|
|
Loop While p
|
|
|
|
If Len(sReplacement2) > 0 Then
|
|
Do
|
|
p = InStr(sTmp, TOPIC_TEXT2)
|
|
If p Then
|
|
sTmp = VBA.Left(sTmp, p - 1) + sReplacement2 + Mid(sTmp, p + Len(TOPIC_TEXT2))
|
|
End If
|
|
Loop While p
|
|
End If
|
|
|
|
ReplaceTopicTokens = sTmp
|
|
|
|
End Function
|
|
|
|
Public Function GetResData(sResName As String, sResType As String) As String
|
|
Dim sTemp As String
|
|
Dim p As Integer
|
|
|
|
sTemp = StrConv(LoadResData(sResName, sResType), vbUnicode)
|
|
p = InStr(sTemp, vbNullChar)
|
|
If p Then sTemp = VBA.Left$(sTemp, p - 1)
|
|
GetResData = sTemp
|
|
End Function
|
|
|
|
Function AddToAddInCommandBar(VBInst As Object, sCaption As String, oBitmap As Object) As Object 'Office.CommandBarControl
|
|
On Error GoTo AddToAddInCommandBarErr
|
|
|
|
Dim c As Integer
|
|
Dim cbMenuCommandBar As Object 'Office.CommandBarControl '命令栏对象
|
|
Dim cbMenu As Object
|
|
|
|
'察看是否能找到外接程序菜单
|
|
Set cbMenu = VBInst.CommandBars("Add-Ins")
|
|
If cbMenu Is Nothing Then
|
|
'没有可用的菜单操作失败
|
|
Exit Function
|
|
End If
|
|
|
|
'添加它到命令栏
|
|
Set cbMenuCommandBar = cbMenu.Controls.Add(1)
|
|
c = cbMenu.Controls.Count - 1
|
|
If cbMenu.Controls(c).BeginGroup And _
|
|
Not cbMenu.Controls(c - 1).BeginGroup Then
|
|
'这是第一个被添加的外接程序,所以需要一个分隔符
|
|
cbMenuCommandBar.BeginGroup = True
|
|
End If
|
|
'设置标题
|
|
cbMenuCommandBar.Caption = sCaption
|
|
'取消:设置所做操作 (在这点被要求)
|
|
cbMenuCommandBar.OnAction = "hello"
|
|
'复制图标到剪贴板
|
|
Clipboard.SetData oBitmap
|
|
'为按钮设制图标
|
|
cbMenuCommandBar.PasteFace
|
|
|
|
Set AddToAddInCommandBar = cbMenuCommandBar
|
|
|
|
Exit Function
|
|
AddToAddInCommandBarErr:
|
|
|
|
End Function
|
|
|
|
|
|
|