home *** CD-ROM | disk | FTP | other *** search
- VERSION 1.0 CLASS
- BEGIN
- MultiUse = -1 'True
- END
- Attribute VB_Name = "Application"
- Attribute VB_Creatable = True
- Attribute VB_Exposed = True
- '**************************************************************
- ' APP.CLS - This is the application class which is exposed
- ' to other OLE Automation clients. It provides some
- ' handy routines that aren't included in VB, and it
- ' is a good demonstration on how to write a OLE server
- ' that can be used with other Office apps.
- '**************************************************************
- Option Explicit
- '**************************************************************
- ' Hidden API Functions for private use only
- '**************************************************************
- #If Win32 Then
- Private Declare Function GetPrivateProfileInt Lib "kernel32" _
- Alias "GetPrivateProfileIntA" (ByVal lpApplicationName$, _
- ByVal lpKeyName As String, ByVal nDefault As Long, ByVal _
- lpFileName As String) As Long
-
- Private Declare Function GetPrivateProfileString Lib "kernel32" _
- Alias "GetPrivateProfileStringA" (ByVal lpApplicationName$, _
- lpKeyName As Any, ByVal lpDefault As String, ByVal _
- lpReturnedString As String, ByVal nSize As Long, ByVal _
- lpFileName As String) As Long
-
- Private Declare Function WritePrivateProfileString Lib _
- "kernel32" Alias "WritePrivateProfileStringA" (ByVal _
- lpApplicationName As String, lpKeyName As Any, lpString _
- As Any, ByVal lplFileName As String) As Long
-
- Private Declare Function GetShortPathName Lib "kernel32" Alias _
- "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal _
- lpszShortPath As String, ByVal cchBuffer As Long) As Long
- #Else
- Private Declare Function GetPrivateProfileInt Lib "Kernel" _
- (ByVal lpApplicationName As String, ByVal lpKeyName _
- As String, ByVal nDefault As Integer, ByVal lpFileName _
- As String) As Integer
-
- Private Declare Function GetPrivateProfileString Lib "Kernel" _
- (ByVal lpAppName As Any, ByVal lpKeyName As Any, _
- ByVal lpDefault As String, ByVal lpReturnedString _
- As String, ByVal nSize As Integer, ByVal lpFileName _
- As String) As Integer
-
- Private Declare Function WritePrivateProfileString% Lib "Kernel" _
- (ByVal lpAppName As Any, ByVal lpKeyName As Any, ByVal _
- lpString As Any, ByVal lpFileName As String)
- #End If
- '**************************************************************
- ' Hidden variable for this class
- '**************************************************************
- Private thisAbout As New About
- '**************************************************************
- ' Description: This proceedure displays an about box
- '
- ' Arguments:
- ' AsSplash (Boolean)- Display as splash screen?
- ' App (String) - The name of your application
- ' AppCompany(String) - The name of your company
- ' VerNum (String) - The version number of your app
- ' User (String) - The name of the registered user
- ' Company (String) - The User's company name
- ' RegNum (String) - The User's registration number
- ' AboutMsg (String) - Your about box message that goes
- ' between the 2 black lines
- ' IconProg (String) - The filename (without a extension)
- ' of the running app that contains
- ' the icon you would like to use.
- ' The default is Progman
- ' (for Program Manager)
- '
- ' IconIdx (Long) - The 1 based index of the icon
- ' stored in IconProg. The default
- ' is 1
- '**************************************************************
- Public Sub ShowAboutBox(AsSplash As Boolean, _
- Optional App, _
- Optional AppCompany, _
- Optional VerNum, _
- Optional User, _
- Optional Company, _
- Optional RegNum, _
- Optional AboutMsg)
-
- '**********************************************************
- ' You should only set the properties if the argument was
- ' provided. Otherwise, just let the default values appear.
- '**********************************************************
- If Not IsMissing(App) Then thisAbout.AppName = App
- If Not IsMissing(AppCompany) Then _
- thisAbout.AppCompanyName = AppCompany
- If Not IsMissing(VerNum) Then thisAbout.VersionNumber = VerNum
- If Not IsMissing(User) Then thisAbout.UserName = User
- If Not IsMissing(Company) Then thisAbout.CompanyName = Company
- If Not IsMissing(RegNum) Then thisAbout.Registration = RegNum
- If Not IsMissing(AboutMsg) Then thisAbout.Message = AboutMsg
- '**********************************************************
- ' Show it using the About object
- '**********************************************************
- thisAbout.ShowAbout AsSplash
- End Sub
- '**************************************************************
- ' Returns a reference to an About object so that its properties
- ' may be accessed individually.
- '**************************************************************
- Public Property Get CreateAbout() As Object
- Attribute CreateAbout.VB_Description = "Returns an About object, so that you may access the class directly."
- Set CreateAbout = thisAbout
- End Property
- '**************************************************************
- ' Unload via the About object
- '**************************************************************
- Public Sub UnloadSplash()
- Attribute UnloadSplash.VB_Description = "Unloads the splash screen"
- thisAbout.HideSplash
- End Sub
- '**************************************************************
- ' This method is just a wrapper for the global function which
- ' the about object needs too. This demonstrates how you can
- ' expose non-class objects.
- '**************************************************************
- ' NOTE: You may be wondering why I didn't just put the code
- ' in here, and require other modules to just call this
- ' one. The reason is that this is a class. If another
- ' module wants to use a class method, then they must
- ' create an object which consumes a great deal of
- ' memory. This method exposes our object, but it also
- ' leaves it available to all forms by putting it into
- ' a module. This duplication is actually an optimization.
- '**************************************************************
- #If Win32 Then
- Public Sub AlwaysOnTop(ByVal hwnd&, ResetWindow As Boolean)
- #Else
- Public Sub AlwaysOnTop(ByVal hwnd%, ResetWindow As Boolean)
- Attribute AlwaysOnTop.VB_Description = "Sets or removes the topmost setting from a given window."
- #End If
- Common.AlwaysOnTop hwnd, ResetWindow
- End Sub
- '**************************************************************
- ' This method is a wrapper for Common.FileExists.
- '**************************************************************
- Public Function FileExists(FileName$) As Boolean
- Attribute FileExists.VB_Description = "Checks to see if a file exists"
- FileExists = Common.FileExists(FileName)
- End Function
- '**************************************************************
- ' This method is a wrapper for Common.GetWinDir.
- '**************************************************************
- Public Function GetWinDir(WithSlash As Boolean) As String
- Attribute GetWinDir.VB_Description = "Returns the path to the Windows directory."
- GetWinDir = Common.GetWinDir(WithSlash)
- End Function
- #If Win32 Then
- '**************************************************************
- ' This function converts a long file name into a DOS compatible
- ' short file name.
- '**************************************************************
- Private Function GetShortName(LongFileName As String) As String
- Dim strFileName As String
- strFileName = Space(2048)
- GetShortName = Left(strFileName, GetShortPathName _
- (LongFileName, strFileName, Len(strFileName)))
- End Function
- #End If
- '**************************************************************
- ' This method extracts the filename (with extension) from a
- ' fully qualified path. If path = "c:\autoexec.bat", then
- ' this method returns "autoexec.bat".
- '**************************************************************
- ' NOTE: This method is not used by any modules or forms in this
- ' project, so its code belongs here.
- '**************************************************************
- '***************************************************************
- ' WARNING: This function modifies Path, so ByVal is required.
- '***************************************************************
- Public Function ExtractFileName(ByVal Path As String) As String
- Attribute ExtractFileName.VB_Description = "Extracts the filename from fully qualified path."
- Dim res%
- '***********************************************************
- ' One of the few uses for GoTo is as an error handler,and
- ' this is a great example of how to use them.
- '***********************************************************
- On Error GoTo ExtractFileName_Err
- '***********************************************************
- ' Since a filename (with extension) in DOS can only be
- ' a maximum of 13 chars (8 + 1 + 3), get rid of the rest.
- '***********************************************************
- #If Win32 Then ' Convert LFN's to SFN's
- Path = GetShortName(Path)
- #End If
- If Len(Path) > 13 Then Path = Right(Path, 13)
- res = InStr(Path, "\")
- '***********************************************************
- ' Get rid of the rest of the garbage by looking for slashes.
- '***********************************************************
- Do While res <> 0
- Path = Mid$(Path, res + 1, Len(Path))
- res = InStr(Path, "\")
- Loop
- '***********************************************************
- ' Return the result, and exit the function to prevent
- ' executing the error handler.
- '***********************************************************
- ExtractFileName = Path
- Exit Function
- '***************************************************************
- ' Our error handler calls an external module's generic error
- ' handler, and exits to prevent further damage.
- '***************************************************************
- ExtractFileName_Err:
- ErrHandler Err, "ExtractFileName"
- Exit Function
- End Function
- '**************************************************************
- ' Calls the API to read an INI file, and return the results.
- ' A large buffer is used so that this function can be used
- ' in any app without causing a GPF.
- '***************************************************************
- ' NOTE: ByVal is used, so you can pass control values such
- ' as Text1.Text without surrounding it in parenthesis.
- '**************************************************************
- Public Function GetINI(ByVal Section$, ByVal Key$, ByVal _
- Default$, ByVal FileName$) As String
- Dim res&, retVal$
- retVal = Space$(32400)
- res = GetPrivateProfileString(Section, Key, Default, _
- retVal, Len(retVal), FileName)
- GetINI = Left$(retVal, res)
- End Function
- '**************************************************************
- ' Same as above, but it returns an integer.
- '**************************************************************
- Public Function GetINIInt(ByVal Section$, ByVal Key$, ByVal _
- Default%, ByVal FileName$) As Integer
- GetINIInt = GetPrivateProfileInt(Section, Key, Default, FileName)
- End Function
- '**************************************************************
- ' This function is useful with SendMessage and GetVersion
- ' so you can get the low order word.
- '**************************************************************
- Public Function GetLoWord(ByVal DWORD&) As Long
- GetLoWord = DWORD And &HFFFF&
- End Function
- '**************************************************************
- ' Same as above, but returns the high order word.
- '**************************************************************
- Public Function GetHiWord(ByVal DWORD As Long) As Long
- Attribute GetHiWord.VB_Description = "Returns the high order word from a DWORD."
- GetHiWord = DWORD \ &H10000
- End Function
- #If Win16 Then
- '**************************************************************
- ' This function is EXTREMELY useful under Win16 for making
- ' a DWORD which is sometimes required by SendMessage's lParam
- ' argument.
- '**************************************************************
- Public Function MakelParam(LoWord%, HiWord%) As Long
- Attribute MakelParam.VB_Description = "Takes 2 integers and converts them to a DWORD."
- MakelParam = CLng(HiWord) * &H1000& Or LoWord
- End Function
- #End If
- '**************************************************************
- ' This method returns the Windows version as a variant so you
- ' can use it as text, or as a number.
- '**************************************************************
- Public Function WindowsVersion() As Variant
- Attribute WindowsVersion.VB_Description = "Returns the version of Windows that is currently running."
- Dim WinVer As Long
- WinVer = GetLoWord(GetVersion())
- WindowsVersion = Format((WinVer Mod 256) + ((WinVer \ 256) _
- / 100), "Fixed")
- End Function
- '**************************************************************
- ' This methods accepts alphanumeric settings to write to an
- ' INI file. In addition, you can delete a section or key by,
- ' passing the special "_DELETE_" string.
- '**************************************************************
- Public Sub WriteINI(ByVal Section$, ByVal Key$, ByVal Setting _
- As Variant, ByVal FileName$)
- Attribute WriteINI.VB_Description = "Writes an entry to an INI file. Use _DELETE_ in Key or Setting to delete Sections or Keys."
- '**********************************************************
- ' If key is set to _DELETE_, then delete the section
- '**********************************************************
- If Key = "_DELETE_" Then
- WritePrivateProfileString Section, 0&, 0&, FileName
- '**********************************************************
- ' If setting is set to _DELETE_, then delete the key
- '**********************************************************
- ElseIf Setting = "_DELETE_" Then
- WritePrivateProfileString Section, Key, 0&, FileName
- '**********************************************************
- ' Otherwise, convert the setting to a string and write it
- ' to the INI file.
- '**********************************************************
- Else
- WritePrivateProfileString Section, Key, CStr(Setting), _
- FileName
- End If
- End Sub
- #If Win32 Then
- '**************************************************************
- ' This method demonstrates how you can expose API calls. Since
- ' you can't use As Any with functions, SendMessage requires
- ' type-safe versions.
- '**************************************************************
- Public Function SendMessageAsLong(hwnd As Long, wMsg As _
- Integer, wParam As Long, lParam As Long) As Long
- SendMessageAsLong = Common.SendMessage(hwnd, wMsg, wParam, _
- lParam)
- End Function
- '**************************************************************
- ' See above.
- '**************************************************************
- Public Function SendMessageAsStr(hwnd As Long, wMsg As _
- Integer, wParam As Long, lParam As String) As Long
- SendMessageAsStr = Common.SendMessage(hwnd, wMsg, wParam, _
- lParam)
- End Function
- '**************************************************************
- ' See above.
- '**************************************************************
- Public Function PostMessage(ByVal hwnd As Long, ByVal wMsg _
- As Integer, ByVal wParam As Long, lParam As Long) As Long
- PostMessage = Common.PostMessage(ByVal hwnd, wMsg, wParam, _
- lParam)
- End Function
- #Else
- '**************************************************************
- ' This method demonstrates how you can expose API calls. Since
- ' you can't use As Any with functions, SendMessage requires
- ' type-safe versions.
- '**************************************************************
- Public Function SendMessageAsLong(hwnd As Integer, wMsg As _
- Integer, wParam As Integer, lParam As Long) As Long
- SendMessageAsLong = Common.SendMessage(hwnd, wMsg, wParam, _
- lParam)
- End Function
- '**************************************************************
- ' See above.
- '**************************************************************
- Public Function SendMessageAsStr(hwnd As Integer, wMsg As _
- Integer, wParam As Integer, lParam As String) As Long
- Attribute SendMessageAsStr.VB_Description = "An exposed wrapper for the SendMessage API call. Use this function as described in the SDK."
- SendMessageAsStr = Common.SendMessage(hwnd, wMsg, wParam, _
- lParam)
- End Function
- '**************************************************************
- ' See above.
- '**************************************************************
- Public Function PostMessage(ByVal hwnd As Integer, ByVal wMsg _
- As Integer, ByVal wParam As Integer, lParam As Long) As Long
- PostMessage = Common.PostMessage(ByVal hwnd, wMsg, wParam, _
- lParam)
- End Function
- #End If
-