blob: 3f537566674b66fb6632369c675796667f7e208a [file] [log] [blame]
Attribute VB_Name = "modWizard"
'*************************************************************************
'
' Licensed to the Apache Software Foundation (ASF) under one
' or more contributor license agreements. See the NOTICE file
' distributed with this work for additional information
' regarding copyright ownership. The ASF licenses this file
' to you under the Apache License, Version 2.0 (the
' "License"); you may not use this file except in compliance
' with the License. You may obtain a copy of the License at
'
' http://www.apache.org/licenses/LICENSE-2.0
'
' Unless required by applicable law or agreed to in writing,
' software distributed under the License is distributed on an
' "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
' KIND, either express or implied. See the License for the
' specific language governing permissions and limitations
' under the License.
'
'*************************************************************************
Option Explicit
Global Const WIZARD_NAME = "Analysis"
'Implementation details - not required for localisation
Public Const CWORD_DRIVER_FILE = "_OOoDocAnalysisWordDriver.doc"
Public Const CEXCEL_DRIVER_FILE = "_OOoDocAnalysisExcelDriver.xls"
Public Const CPP_DRIVER_FILE = "_OOoDocAnalysisPPTDriver.ppt"
Public Const CRESULTS_TEMPLATE_FILE = "results.xlt"
Public Const CISSUES_LIST_FILE = "issues.list"
Public Const CANALYSIS_INI_FILE = "analysis.ini"
Public Const CLAUNCH_DRIVERS_EXE = "LaunchDrivers.exe"
Public Const CMSO_KILL_EXE = "msokill.exe"
Public Const CRESOURCE_DLL = "Resources.dll"
' Preparation String ID's from DocAnalysisWizard.rc
Public Const RID_STR_ENG_TITLE_PREP_ID = 1030
Public Const RID_STR_ENG_SIDEBAR_ANALYZE_PREP_ID = 1074
Public Const RID_STR_ENG_INTRODUCTION_INTRO1_PREP_ID = 1131
Public Const RID_STR_ENG_INTRODUCTION_INTRO2_PREP_ID = 1132
Public Const RID_STR_ENG_INTRODUCTION_INTRO3_PREP_ID = 1134
Public Const RID_STR_ENG_DOCUMENTS_CHOOSE_DOCUMENTS_PREP_ID = 1230
Public Const RID_STR_ENG_DOCUMENTS_CHOOSE_DOC_TYPES_PREP_ID = 1236
Public Const RID_STR_ENG_DOCUMENTS_INCLUDE_SUBDIRECTORIES_PREP_ID = 1232
Public Const RID_STR_IGNORE_OLDER_CB_ID = 1231
Public Const RID_STR_IGNORE_OLDER_3_MONTHS_ID = 1233
Public Const RID_STR_IGNORE_OLDER_6_MONTHS_ID = 1234
Public Const RID_STR_IGNORE_OLDER_12_MONTHS_ID = 1235
Public Const RID_STR_ENG_RESULTS_CHOOSE_OPTIONS_PREP_ID = 1330
Public Const RID_STR_ENG_RESULTS_ANALYSIS_XLS_PREP_ID = 1332
Public Const RID_STR_ENG_ANALYZE_NUM_DOCS_PREP_ID = 1431
Public Const RID_STR_ENG_ANALYZE_SETUP_COMPLETE_PREP_ID = 1430
Public Const RID_STR_ENG_ANALYZE_IGNORED_DOCS_ID = 1435
Public Const RID_STR_ENG_ANALYZE_START_ID = 1413
Public Const RID_STR_ENG_ANALYZE_COMPLETED_ID = 1412
Public Const RID_STR_ENG_ANALYZE_VIEW_NOW_ID = 1414
Public Const RID_STR_ENG_ANALYZE_VIEW_LATER_ID = 1415
Public Const RID_STR_ENG_ANALYSE_NOT_RUN = 1416
Public Const RID_STR_ENG_OTHER_PLEASE_REFER_TO_README_PREP_ID = 1838
Public Const RID_STR_ENG_OTHER_XML_RESULTS_PREP_ID = 1845
Public Const RID_STR_ENG_OTHER_PREPARE_PROMPT_PREP_ID = 1846
Public Const RID_STR_ENG_OTHER_PREPARE_COMPLETED_PREP_ID = 1847
'Resource Strings Codes
' NOTE: to make a resource the default it must be the first string table inserted
' in the resource table - if it is not, just create several new string tables and
' copy what you want as default into the first new one you create, copy the others
' then delete the originals.
'
' To provide same string table for all English variants or all German variants
' I have added code to set LANG_BASE_ID dependent on current locale
' Refer to p.414 VBA in a Nutshell, Lomax
' I now have a single string table with each lang variant suitably offset:
' New locale - increase ofsets by 1000 - refer to DocAnalysisWizard.rc
'
' English - eng - Start at 1000
' German - ger - Start at 2000
' BrazilianPortugese - por - Start at 4000
' French - fre - Start at 5000
' Italian - ita - Start at 6000
' Spanish - spa - Start at 7000
' Swedish - swe - Start at 8000
' String ID's must match those in DocAnalysisWizard.rc
Const LANG_BASE_ID = 1000
Const INTERNAL_RESOURCE_BASE_ID = LANG_BASE_ID + 800
' Setup Doc Preparation specific strings
#If PREPARATION Then
Global Const gBoolPreparation = True
Public Const TITLE_ID = RID_STR_ENG_TITLE_PREP_ID
Public Const CHK_SUBDIRS_ID = RID_STR_ENG_DOCUMENTS_INCLUDE_SUBDIRECTORIES_PREP_ID
Public Const SETUP_ANALYSIS_XLS_ID = RID_STR_ENG_RESULTS_ANALYSIS_XLS_PREP_ID
Public Const ANALYZE_TOTAL_NUM_DOCS_ID = RID_STR_ENG_ANALYZE_NUM_DOCS_PREP_ID
Public Const XML_RESULTS_ID = RID_STR_ENG_OTHER_XML_RESULTS_PREP_ID
#Else
Global Const gBoolPreparation = False
Public Const TITLE_ID = LANG_BASE_ID + 0
Public Const CHK_SUBDIRS_ID = LANG_BASE_ID + 202
Public Const SETUP_ANALYSIS_XLS_ID = LANG_BASE_ID + 302
Public Const ANALYZE_TOTAL_NUM_DOCS_ID = LANG_BASE_ID + 401
Public Const XML_RESULTS_ID = INTERNAL_RESOURCE_BASE_ID + 15
#End If
Public Const PRODUCTNAME_ID = LANG_BASE_ID + 1
Public Const LBL_STEPS_ID = LANG_BASE_ID + 40
Public Const INTRO1_ID = LANG_BASE_ID + 101
Public Const ANALYZE_DOCUMENTS_ID = LANG_BASE_ID + 402
Public Const ANALYZE_TEMPLATES_ID = LANG_BASE_ID + 403
Public Const ANALYZE_DOCUMENTS_XLS_ID = LANG_BASE_ID + 408
Public Const ANALYZE_DOCUMENTS_PPT_ID = LANG_BASE_ID + 409
Public Const RUNBTN_START_ID = LANG_BASE_ID + 404
Public Const PREPAREBTN_START_ID = LANG_BASE_ID + 411
Public Const README_FILE_ID = INTERNAL_RESOURCE_BASE_ID + 5 'Readme.doc
Public Const BROWSE_FOR_DOC_DIR_ID = INTERNAL_RESOURCE_BASE_ID + 6
Public Const BROWSE_FOR_RES_DIR_ID = INTERNAL_RESOURCE_BASE_ID + 7
Public Const RUNBTN_RUNNING_ID = INTERNAL_RESOURCE_BASE_ID + 10
Public Const PROGRESS_CAPTION = INTERNAL_RESOURCE_BASE_ID + 20
Public Const PROGRESS_ABORTING = INTERNAL_RESOURCE_BASE_ID + 21
Public Const PROGRESS_PATH_LABEL = INTERNAL_RESOURCE_BASE_ID + 22
Public Const PROGRESS_FILE_LABEL = INTERNAL_RESOURCE_BASE_ID + 23
Public Const PROGRESS_INFO_LABEL = INTERNAL_RESOURCE_BASE_ID + 24
Public Const PROGRESS_WAIT_LABEL = INTERNAL_RESOURCE_BASE_ID + 25
Public Const SEARCH_PATH_LABEL = PROGRESS_PATH_LABEL
Public Const SEARCH_CAPTION = INTERNAL_RESOURCE_BASE_ID + 26
Public Const SEARCH_INFO_LABEL = INTERNAL_RESOURCE_BASE_ID + 27
Public Const SEARCH_FOUND_LABEL = INTERNAL_RESOURCE_BASE_ID + 28
Public Const TERMINATE_CAPTION = INTERNAL_RESOURCE_BASE_ID + 30
Public Const TERMINATE_INFO = INTERNAL_RESOURCE_BASE_ID + 31
Public Const TERMINATE_YES = INTERNAL_RESOURCE_BASE_ID + 32
Public Const TERMINATE_NO = INTERNAL_RESOURCE_BASE_ID + 33
'Error Resource Strings Codes
Const ERROR_BASE_ID = LANG_BASE_ID + 900
Public Const ERR_MISSING_RESULTS_DOC = ERROR_BASE_ID + 0
Public Const ERR_NO_DOC_DIR = ERROR_BASE_ID + 1
Public Const ERR_NO_DOC_TYPES = ERROR_BASE_ID + 2
Public Const ERR_NO_RES_DIR = ERROR_BASE_ID + 3
Public Const ERR_CREATE_DIR = ERROR_BASE_ID + 4
Public Const ERR_MISSING_RESULTS_TEMPLATE = ERROR_BASE_ID + 5
Public Const ERR_MISSING_EXCEL_DRIVER = ERROR_BASE_ID + 6
Public Const ERR_EXCEL_DRIVER_CRASH = ERROR_BASE_ID + 7
Public Const ERR_MISSING_WORD_DRIVER = ERROR_BASE_ID + 8
Public Const ERR_WORD_DRIVER_CRASH = ERROR_BASE_ID + 9
Public Const ERR_MISSING_README = ERROR_BASE_ID + 10
Public Const ERR_MISSING_PP_DRIVER = ERROR_BASE_ID + 11
Public Const ERR_PP_DRIVER_CRASH = ERROR_BASE_ID + 12
Public Const ERR_SUPPORTED_VERSION = ERROR_BASE_ID + 13
Public Const ERR_ISSUES_VERSION_MISMATCH = ERROR_BASE_ID + 14
Public Const ERR_ISSUES_LIST_MISSING = ERROR_BASE_ID + 15
Public Const ERR_SUPPORTED_OSVERSION = ERROR_BASE_ID + 16
Public Const ERR_OPEN_RESULTS_SPREADSHEET = ERROR_BASE_ID + 17
Public Const ERR_EXCEL_OPEN = ERROR_BASE_ID + 18
Public Const ERR_NO_ACCESS_TO_VBPROJECT = ERROR_BASE_ID + 19
Public Const ERR_AUTOMATION_FAILURE = ERROR_BASE_ID + 20
Public Const ERR_NO_RESULTS_DIRECTORY = ERROR_BASE_ID + 21
Public Const ERR_CREATE_FILE = ERROR_BASE_ID + 22
Public Const ERR_XML_RESULTS_ONLY = ERROR_BASE_ID + 23
Public Const ERR_NOT_INSTALLED = ERROR_BASE_ID + 24
Public Const ERR_CDROM_NOT_ALLOWED = ERROR_BASE_ID + 25
Public Const ERR_CDROM_NOT_READY = ERROR_BASE_ID + 26
Public Const ERR_NO_WRITE_TO_READ_ONLY_FOLDER = ERROR_BASE_ID + 27
Public Const ERR_APPLICATION_IN_USE = ERROR_BASE_ID + 28
Public Const ERR_MISSING_IMPORTANT_FILE = ERROR_BASE_ID + 29
Private Const LOCALE_ILANGUAGE As Long = &H1 'language id
Private Const LOCALE_SLANGUAGE As Long = &H2 'localized name of language
Private Const LOCALE_SENGLANGUAGE As Long = &H1001 'English name of language
Private Const LOCALE_SABBREVLANGNAME As Long = &H3 'abbreviated language name
Private Const LOCALE_SCOUNTRY As Long = &H6 'localized name of country
Private Const LOCALE_SENGCOUNTRY As Long = &H1002 'English name of country
Private Const LOCALE_SABBREVCTRYNAME As Long = &H7 'abbreviated country name
Private Const LOCALE_SISO639LANGNAME As Long = &H59 'ISO abbreviated language name
Private Const LOCALE_SISO3166CTRYNAME As Long = &H5A 'ISO abbreviated country name
Private Const LOCALE_JAPAN As Long = &H411
Private Const LOCALE_KOREA As Long = &H412
Private Const LOCALE_ZH_CN As Long = &H404
Private Const LOCALE_ZH_TW As Long = &H804
Private Const RES_PREFIX = ".\Resources\Resources.dll"
Declare Function GetLocaleInfo Lib "kernel32" Alias _
"GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, _
ByVal cchData As Long) As Long
Declare Function WritePrivateProfileString& Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal AppName$, ByVal KeyName$, ByVal keydefault$, ByVal fileName$)
Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function LoadString Lib "user32" Alias "LoadStringA" _
(ByVal hInstance As Long, ByVal wID As Long, ByVal lpBuffer As String, _
ByVal nBufferMax As Long) As Long
'WinHelp Commands
'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 ' Terminate help
'Public Const HELP_CONTENTS = &H3& ' Display index/contents
'Public Const HELP_CONTEXT = &H1 ' Display topic in ulTopic
'Public Const HELP_INDEX = &H3 ' Display index
Public Const CBASE_RESOURCE_DIR = ".\resources"
Private mStrTrue As String
Private mLocaleDir As String
Private ghInst As Long
Function getLocaleDir() As String
If mLocaleDir = "" Then
getLocaleLangBaseIDandSetLocaleDir
End If
getLocaleDir = mLocaleDir
End Function
Public Function GetLocaleLanguage() As String
Dim lReturn As Long
Dim lLocID As Long
Dim sData As String
Dim lDataLen As Long
lDataLen = 0
lReturn = GetLocaleInfo(lLocID, LOCALE_SENGLANGUAGE, sData, lDataLen)
sData = String(lReturn, 0) & vbNullChar
lDataLen = lReturn
lReturn = GetLocaleInfo(lLocID, LOCALE_SENGLANGUAGE, sData, lDataLen)
End Function
Function getLocaleLangBaseIDandSetLocaleDir() As Integer
On Error GoTo HandleErrors
Dim currentFunctionName As String
currentFunctionName = "getLocaleLangBaseIDandSetLocaleDir"
Dim baseID As Long
Dim bUseLocale As Boolean
Dim fso As FileSystemObject
Set fso = New FileSystemObject
Dim isoLangStr As String
Dim isoCountryStr As String
Dim langStr As String
Dim userLCID As Long
userLCID = GetUserDefaultLCID()
Dim sysLCID As Long
sysLCID = GetSystemDefaultLCID()
isoLangStr = GetUserLocaleInfo(sysLCID, LOCALE_SISO639LANGNAME)
isoCountryStr = GetUserLocaleInfo(sysLCID, LOCALE_SISO3166CTRYNAME)
langStr = GetUserLocaleInfo(sysLCID, LOCALE_SENGLANGUAGE)
baseID = 0
mLocaleDir = ""
If fso.FileExists(fso.GetAbsolutePathName("debug.ini")) Then
Dim overrideLangStr As String
overrideLangStr = ProfileGetItem("debug", "langoverride", "", fso.GetAbsolutePathName("debug.ini"))
If overrideLangStr <> "" Then
Debug.Print "Overriding language " & isoLangStr & " with " & overrideLangStr & "\n"
isoLangStr = overrideLangStr
End If
End If
'check for locale dirs in following order:
' CBASE_RESOURCE_DIR & "\" & isoLangStr
' CBASE_RESOURCE_DIR & "\" & isoLangStr & "-" & isoCountryStr
' CBASE_RESOURCE_DIR & "\" & "eng"
'If fso.FolderExists(fso.GetAbsolutePathName(CBASE_RESOURCE_DIR & "\" & isoLangStr)) Then
' mLocaleDir = CBASE_RESOURCE_DIR & "\" & isoLangStr
' baseID = getBaseID(isoLangStr)
'ElseIf fso.FolderExists(fso.GetAbsolutePathName(CBASE_RESOURCE_DIR & "\" & isoLangStr & "-" & isoCountryStr)) Then
' mLocaleDir = CBASE_RESOURCE_DIR & "\" & isoLangStr & "-" & isoCountryStr
' baseID = getBaseID(isoLangStr & "-" & isoCountryStr)
'Else
mLocaleDir = CBASE_RESOURCE_DIR
baseID = 1000
'End If
getLocaleLangBaseIDandSetLocaleDir = CInt(baseID)
FinalExit:
Set fso = Nothing
Exit Function
HandleErrors:
Debug.Print currentFunctionName & " : " & Err.Number & " " & Err.Description & " " & Err.Source
Resume FinalExit
End Function
'--------------------------------------------------------------------------
'this sub must be executed from the immediate window
'it will add the entry to VBADDIN.INI if it doesn't already exist
'so that the add-in is on available next time VB is loaded
'--------------------------------------------------------------------------
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 sRes As String * 1024
Dim sRetStr As String
Dim nRet As Long
Do
'sTmp = LoadResString(nRes)
nRet = LoadString(ghInst, nRes, sRes, 1024)
sTmp = Left$(sRes, nRet)
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
' Parts of the following code are from:
' http://support.microsoft.com/default.aspx?scid=kb;en-us;232625&Product=vb6
Private Function GetCharSet(sCdpg As String) As Integer
Select Case sCdpg
Case "932" ' Japanese
GetCharSet = 128
Case "936" ' Simplified Chinese
GetCharSet = 134
Case "949" ' Korean
GetCharSet = 129
Case "950" ' Traditional Chinese
GetCharSet = 136
Case "1250" ' Eastern Europe
GetCharSet = 238
Case "1251" ' Russian
GetCharSet = 204
Case "1252" ' Western European Languages
GetCharSet = 0
Case "1253" ' Greek
GetCharSet = 161
Case "1254" ' Turkish
GetCharSet = 162
Case "1255" ' Hebrew
GetCharSet = 177
Case "1256" ' Arabic
GetCharSet = 178
Case "1257" ' Baltic
GetCharSet = 186
Case Else
GetCharSet = 0
End Select
End Function
Private Function StripNullTerminator(sCP As String)
Dim posNull As Long
posNull = InStr(sCP, Chr$(0))
StripNullTerminator = Left$(sCP, posNull - 1)
End Function
Private Function GetResourceDataFileName() As String
On Error GoTo HandleErrors
Dim currentFunctionName As String
currentFunctionName = "GetResourceDataFileName"
Dim fileName As String
Dim fso As FileSystemObject
Set fso = New FileSystemObject
GetResourceDataFileName = fso.GetAbsolutePathName(RES_PREFIX)
GoTo FinalExit
' use the following code when we have one resource file for each language
Dim isoLangStr As String
Dim isoCountryStr As String
Dim userLCID As Long
userLCID = GetUserDefaultLangID()
Dim sysLCID As Long
sysLCID = GetSystemDefaultLangID()
isoLangStr = GetUserLocaleInfo(userLCID, LOCALE_SISO639LANGNAME)
isoCountryStr = GetUserLocaleInfo(userLCID, LOCALE_SISO3166CTRYNAME)
'check for locale data in following order:
' user language
' isoLangStr & "_" & isoCountryStr & ".dll"
' isoLangStr & ".dll"
' system language
' isoLangStr & "_" & isoCountryStr & ".dll"
' isoLangStr & ".dll"
' "en_US" & ".dll"
fileName = fso.GetAbsolutePathName(RES_PREFIX & isoLangStr & "-" & isoCountryStr & ".dll")
If fso.FileExists(fileName) Then
GetResourceDataFileName = fileName
Else
fileName = fso.GetAbsolutePathName(RES_PREFIX & isoLangStr & ".dll")
If fso.FileExists(fileName) Then
GetResourceDataFileName = fileName
Else
isoLangStr = GetUserLocaleInfo(sysLCID, LOCALE_SISO639LANGNAME)
isoCountryStr = GetUserLocaleInfo(sysLCID, LOCALE_SISO3166CTRYNAME)
fileName = fso.GetAbsolutePathName(RES_PREFIX & isoLangStr & "-" & isoCountryStr & ".dll")
If fso.FileExists(fileName) Then
GetResourceDataFileName = fileName
Else
fileName = fso.GetAbsolutePathName(RES_PREFIX & isoLangStr & ".dll")
If fso.FileExists(fileName) Then
GetResourceDataFileName = fileName
Else
GetResourceDataFileName = fso.GetAbsolutePathName(RES_PREFIX & "en-US.dll")
End If
End If
End If
End If
FinalExit:
Set fso = Nothing
Exit Function
HandleErrors:
WriteDebug currentFunctionName & " : " & Err.Number & " " & Err.Description & " " & Err.Source
Resume FinalExit
End Function
Sub LoadResStrings(frm As Form)
Dim ctl As Control
Dim obj As Object
Dim LCID As Long, X As Long
Dim sCodePage As String
Dim nCharSet As Integer
Dim currentFunctionName As String
currentFunctionName = "LoadResStrings"
On Error GoTo HandleErrors
ghInst = LoadLibrary(GetResourceDataFileName())
On Error Resume Next
sCodePage = String$(16, " ")
LCID = GetThreadLocale() 'Get Current locale
X = GetLocaleInfo(LCID, LOCALE_IDEFAULTANSICODEPAGE, _
sCodePage, Len(sCodePage)) 'Get code page
sCodePage = StripNullTerminator(sCodePage)
nCharSet = GetCharSet(sCodePage) 'Convert code page to charset
'set the form's caption
If IsNumeric(frm.Tag) Then
frm.Caption = LoadResString(CInt(frm.Tag))
End If
'set the controls' captions using the caption
'property for menu items and the Tag property
'for all other controls
For Each ctl In frm.Controls
Err = 0
If (nCharSet <> 0) Then
ctl.Font.Charset = nCharSet
End If
If TypeName(ctl) = "Menu" Then
If IsNumeric(ctl.Caption) Then
ctl.Caption = LoadResString(CInt(ctl.Caption))
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
'check for a tooltip
If IsNumeric(obj.ToolTipText) Then
If Err = 0 Then
obj.ToolTipText = LoadResString(CInt(obj.ToolTipText))
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
ElseIf TypeName(ctl) = "TextBox" Then
If IsNumeric(ctl.Tag) Then
ctl.Text = LoadResString(CInt(ctl.Tag))
End If
Else
If IsNumeric(ctl.Tag) Then
ctl.Caption = GetResString(CInt(ctl.Tag))
End If
'check for a tooltip
If IsNumeric(ctl.ToolTipText) Then
If Err = 0 Then
ctl.ToolTipText = LoadResString(CInt(ctl.ToolTipText))
End If
End If
End If
Next
FinalExit:
Exit Sub
HandleErrors:
WriteDebug currentFunctionName & " : " & Err.Number & " " & Err.Description & " " & Err.Source
Resume FinalExit
End Sub
'==================================================
'Purpose: Replace the sToken string(s) in
' res file string for correct placement
' of localized tokens
'
'Inputs: sString = String to search and replace in
' sToken = token to replace
' sReplacement = String to replace token with
'
'Outputs: New string with token replaced throughout
'==================================================
Function ReplaceTopicTokens(sString As String, _
sToken As String, _
sReplacement As String) As String
On Error Resume Next
Dim p As Integer
Dim sTmp As String
sTmp = sString
Do
p = InStr(sTmp, sToken)
If p Then
sTmp = VBA.Left(sTmp, p - 1) + sReplacement + Mid(sTmp, p + Len(sToken))
End If
Loop While p
ReplaceTopicTokens = sTmp
End Function
'==================================================
'Purpose: Replace the sToken1 and sToken2 strings in
' res file string for correct placement
' of localized tokens
'
'Inputs: sString = String to search and replace in
' sToken1 = 1st token to replace
' sReplacement1 = 1st String to replace token with
' sToken2 = 2nd token to replace
' sReplacement2 = 2nd String to replace token with
'
'Outputs: New string with token replaced throughout
'==================================================
Function ReplaceTopic2Tokens(sString As String, _
sToken1 As String, _
sReplacement1 As String, _
sToken2 As String, _
sReplacement2 As String) As String
On Error Resume Next
ReplaceTopic2Tokens = _
ReplaceTopicTokens(ReplaceTopicTokens(sString, sToken1, sReplacement1), _
sToken2, sReplacement2)
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 'command bar object
Dim cbMenu As Object
'see if we can find the Add-Ins menu
Set cbMenu = VBInst.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)
c = cbMenu.Controls.count - 1
If cbMenu.Controls(c).BeginGroup And _
Not cbMenu.Controls(c - 1).BeginGroup Then
'this s the first addin being added so it needs a separator
cbMenuCommandBar.BeginGroup = True
End If
'set the caption
cbMenuCommandBar.Caption = sCaption
'undone:set the onaction (required at this point)
cbMenuCommandBar.OnAction = "hello"
'copy the icon to the clipboard
Clipboard.SetData oBitmap
'set the icon for the button
cbMenuCommandBar.PasteFace
Set AddToAddInCommandBar = cbMenuCommandBar
Exit Function
AddToAddInCommandBarErr:
End Function