We are currently planning for the next several issues of Code of the Week. If you have any suggestions of source code that you would like to see covered, please jump to our feedback page at http://www.codeoftheweek.com/feedback.html and let us know.
The source code in this issue is designed for all versions of Visual Basic 4.0 or greater. It should work in 16-bit and 32-bit modes. Similiar techniques can be used in VB 3.0.
We will introduce the first version of a logging class (this is an issue that will probably be enhanced later on this year depending on user feedback). There are several instances where having a log file of the events that occur, procedures called and variable values while running your application are useful. This logging class lets you include statements throughout your code to be written out to a log file.
A couple of situations where this is useful are:
Here is a sample of what a log file might look like:
10/28/97 6:04:19 PM Started Log File ---------------------------------------- 10/28/97 6:04:23 PM Enter cmdActions Index = 2 10/28/97 6:04:23 PM Loading text box from E:\cotw\projects\0008\DEBUG.LOG 10/28/97 6:04:23 PM Exit cmdActions Index = 2 10/28/97 6:04:36 PM Ended Log File ----------------------------------------
Public gLogFile as New cLogFile gLogFile.Active = True gLogFile.Output "Here's a line for the log file" gLogFile.Push "This should be indented one level" gLogFile.Push "This should be indented another level" gLogFile.Pop "This should be unindented one level" gLogFile.Pop "This should be unindented another level" gLogFile.Active = False
Putting the Public definition in a BAS module probably makes the most sense since it can then be used throughout your entire application.
Just paste this code into a new class module and change the name to cLogFile.
'----------------------------------------------------------------------
'
' Class Name: cLogFile
' Written By: C&D Programming Corp.
' Create Date: 10/28/97
' Copyright: Copyright 1997 by C&D Programming Corp. Source
' code may not be reproduced except for use in a
' compiled executable. All rights reserved. If
' you would like to reprint any or all of this
' code please email us at info@codeoftheweek.com
'
' Purpose: Provide easy methods to output data to a log file.
'
' Notes: Filename defaults to App.Path & "\DEBUG.LOG"
'
'
'----------------------------------------------------------------------
Option Explicit
Private msFilename As String
Private mbActive As Boolean
Private miIndent As Integer
Private miIndentAmount As Integer
'----------------------------------------------------------------------
' Public properties
'----------------------------------------------------------------------
Public Property Let Filename(sFilename As String)
msFilename = sFilename
End Property
Public Property Get Filename() As String
Filename = msFilename
End Property
Public Property Let IndentAmount(iIndentAmount As Integer)
miIndentAmount = iIndentAmount
End Property
Public Property Get IndentAmount() As Integer
IndentAmount = miIndentAmount
End Property
Public Property Let Active(bActive As Boolean)
If bActive Then
mbActive = bActive
Output "Started Log File " & String(40, "-")
Else
Output "Ended Log File " & String(40, "-")
mbActive = bActive
End If
End Property
'----------------------------------------------------------------------
' Private subroutines
'----------------------------------------------------------------------
Private Sub Class_Initialize()
If Right(App.Path, 1) = "\" Then
Filename = App.Path & "DEBUG.LOG"
Else
Filename = App.Path & "\DEBUG.LOG"
End If
Active = False
IndentAmount = 3
miIndent = -1
End Sub
Private Sub Class_Terminate()
Active = False
End Sub
'----------------------------------------------------------------------
' Public subroutines
'----------------------------------------------------------------------
Public Sub Output(sMsg As String)
Dim iFile As Integer
On Error Goto AbortIt
If mbActive Then
iFile = FreeFile
Open Filename For Append As #iFile
If miIndent = -1 Then
Print #iFile, Now & " " & sMsg
Else
Print #iFile, Now & " " & Space(miIndent * miIndentAmount) & sMsg
End If
Close #iFile
End If
Exit Sub
AbortIt:
MsgBox "Can not open " & Filename
Exit Sub
End Sub
Public Sub Push(sMsg As String)
miIndent = miIndent + 1
Output "Enter " & sMsg
End Sub
Public Sub Pop(sMsg As String)
Output "Exit " & sMsg
miIndent = miIndent - 1
End Sub
Public Function Remove() As Boolean
On Error Resume Next
Kill Filename
Remove = (Err = 0)
End Function
If you would like to see this class module enhanced to include additional features, drop us an email at info@codeoftheweek.com and if we get some good response we will enhance the source code shown in this issue. Some enhancements are including an option to show available memory and resources to help find places in your code where resources are being lost.
That concludes this issue of COTW. We hope you find the source code useful in your development.
The below describes the ways you can supply us some feedback about COTW. We would like to see our members help mold COTW into the best Visual Basic source code resource available. But to do that we need your feedback about what you like and what you do not like about COTW.
If you have any suggestions for topics you would like to see covered or questions about this issue, please email them to info@codeoftheweek.com or use online feedback form at http://www.codeoftheweek.com/feedback.html.
If you have any source code you would like to submit for possible inclusion in COTW, please fill out our online submission form at http://www.codeoftheweek.com/submission.html.
Thank you for trying Code of the Week for Visual Basic.
Your free trial expires after you receive your fourth issue. If you want to continue to receive Code of the Week you can get 52 issues of COTW for only $19.95. This is a full year of Visual Basic source code and information to help with all your development. So don't wait, subscribe now! The quickest way to subscribe is to jump to our online order form at http://www.codeoftheweek.com/order.html
We accept payment by Mastercard, Visa, check or money order. All payments must be in U.S. Dollars. If you are an international customer paying by credit card is usually the easiest method of payment.
If you prefer not to visit our web site:
1. Enclose a note with your email address and name.
2. If you are paying by credit card, make sure you include the credit card number, credit card expiration and name on the credit card and your signature. If you are paying by check, make it payable to C&D Programming Corp.
3. Mail it to (credit card payments can be faxed to (212) 504-7945):
C&D Programming Corp.
PO Box 20128
Floral Park, NY 11002-0128
4. As soon as we receive your payment you will be added to our paid subscriber list.