Content Supported by Sourcelens Consulting

@VERSION =  0.029"Arial, 1, 10, 6, 16, 13, 14, 3, 0
cmdokPixelsok.bmpok.bmp RELEASE THISFORM, default buttonClass1�<�����B���ƅ<���Hj�/����R����5���f�EƋE��ȉE��S����E
commandbuttonȉ�R���脍���Ћ��]x����R����g�����R����1��cmdok���f�����<���P�������U���<�����B���j�0��f�EƋE�(Courier New, 1, 11, 9, 17, 12, 11, 5, 0
vcrPixels..\solution\next.bmp..\solution\next.bmpgeneric vcr buttonsClass6	containervcr���� ��6v%Xmg�U$I������UTHIS
HELPCONTEXTIDClick,��13/)�DTop = 6
Left = 44
Height = 15
Width = 23
Name = "Datachecker1"
vcr.Datachecker1�PROCEDURE Click
IF TYPE("THISFORM.PARENT") = 'O'
	RELEASE THISFORMSET
ELSE
	RELEASE THISFORM
ENDIF

ENDPROC
PROCEDURE Error
LPARAMETERS nError, cMethod, nLine
DO CASE
	CASE nError = 1585 && Update conflict
	  DO CASE
	    CASE INLIST(CURSORGETPROP('Buffering'), 2,3) && Row Buffering
			FOR nField = 1 to FCOUNT(ALIAS())
			cField = FIELD(nField)
			  IF OLDVAL(cField) != CURVAL(cField)
				nChoice = MESSAGEBOX('Data in ' + cField + 'was changed by another user' + ;
					CR_LOC + 'Do you want to save your changes anyway?', 4+48+0, 'Data Conflict')
				IF nChoice = 6 && yes
					=TABLEUPDATE(.F., .T.)
				ELSE
					=TABLEREVERT(.F.)
				ENDIF
			  ENDIF
			ENDFOR
		CASE INLIST(CURSORGETPROP('Buffering'), 4,5)
		nRec = GETNEXTMODIFIED(0)
		DO WHILE nRec > 0
			FOR nField = 1 to FCOUNT(ALIAS())
				cField = FIELD(nField)
				IF OLDVAL(cField) != CURVAL(cField)
				nChoice = MESSAGEBOX('Data in ' + cField + 'was changed by another user' + ;
					CR_LOC + 'Do you want to save your changes anyway?', 4+48+0, 'Data Conflict')
					IF nChoice = 6 && yes
						=TABLEUPDATE(.F., .T.)
					ELSE
						=TABLEREVERT(.F.)
					ENDIF
				ENDIF
			ENDFOR
			nRec = GETNEXTMODIFIED(nRec)	
		ENDDO
		ENDCASE
ENDCASE		

ENDPROC
�rHHeight = 30
Width = 94
Caption = "OK"
Default = .F.
Name = "cmdok"
؉E�;E����E��E�+E܉E�;E����u܋}��ON
commandbuttonf�A����M�f=SVWwf����J��E����}�custom..\solution\solution.vcxdatachecker���� ����%@	.�U/
�����#6�
�����
�����UTHISPARENTBEFORERECORDPOINTERMOVEDENABLEDISABLEBUTTONSRECORDPOINTERMOVED.4������C��������UNERRORCMETHODNLINETHISPARENTERRORClick,��Error���1�R��2��1���	)�vcr.GBrings up the help file, searching for the HelpContextID of the controlPixelshelp.bmphelp.bmp1Class:PROCEDURE Click
HELP ID This.HelpContextID


ENDPROC
SCaption = "\<Help"
Height = 30
Width = 94
HelpContextID = 15
Name = "cmdHelp"
cmdHelp
commandbutton
commandbutton�PROCEDURE Click
THIS.Parent.BeforeRecordPointerMoved

GO BOTTOM

THIS.Parent.EnableDisableButtons
THIS.Parent.RecordPointerMoved
ENDPROC
PROCEDURE Error
Parameters nError, cMethod, nLine
This.Parent.Error(nError, cMethod, nLine)
ENDPROC
Release Form or Form SetPixels
cancel.bmp
cancel.bmp1Class(Caption = "Cancel"
Name = "cmdCancel"
�Top = 0
Left = 78
Height = 24
Width = 26
FontBold = .T.
FontName = "Courier New"
FontSize = 11
Caption = ">|"
TabIndex = 4
ToolTipText = "Bottom"
Name = "cmdBottom"
	cmdBottom
commandbutton
commandbutton���� ����%)_G�UH
�����	H����%�C+��'�#6��
�����
�����UTHISPARENTBEFORERECORDPOINTERMOVEDRECORDPOINTERMOVEDENABLEDISABLEBUTTONS.4������C��������UNERRORCMETHODNLINETHISPARENTERRORClick,��Error���1���QA��3��1�	�

)�PROCEDURE Click
THIS.Parent.BeforeRecordPointerMoved

SKIP 1
IF EOF()
	GO BOTTOM
ENDIF

THIS.Parent.RecordPointerMoved
THIS.Parent.EnableDisableButtons

ENDPROC
PROCEDURE Error
Parameters nError, cMethod, nLine
This.Parent.Error(nError, cMethod, nLine)
ENDPROC
�Top = 0
Left = 52
Height = 24
Width = 26
FontBold = .T.
FontName = "Courier New"
FontSize = 11
Caption = ">"
TabIndex = 3
ToolTipText = "Next"
Name = "cmdNext"
vcr.cmdNext
commandbutton
commandbutton���� ���%*`H�UI
�����
H������%�C��(�#)��
�����
�����UTHISPARENTBEFORERECORDPOINTERMOVEDRECORDPOINTERMOVEDENABLEDISABLEBUTTONS.4������C��������UNERRORCMETHODNLINETHISPARENTERRORClick,��Error���1���QA��3��1�	�
)�PROCEDURE Click
THIS.Parent.BeforeRecordPointerMoved

SKIP -1
IF BOF()
	GO TOP
ENDIF

THIS.Parent.RecordPointerMoved
THIS.Parent.EnableDisableButtons

ENDPROC
PROCEDURE Error
Parameters nError, cMethod, nLine
This.Parent.Error(nError, cMethod, nLine)
ENDPROC
�Top = 0
Left = 26
Height = 24
Width = 26
FontBold = .T.
FontName = "Courier New"
FontSize = 11
Caption = "<"
TabIndex = 2
ToolTipText = "Prior"
Name = "cmdPrior"
vcr.cmdPrior
commandbutton
commandbutton���� ����%@	.�U/
�����#)�
�����
�����UTHISPARENTBEFORERECORDPOINTERMOVEDRECORDPOINTERMOVEDENABLEDISABLEBUTTONS.4������C��������UNERRORCMETHODNLINETHISPARENTERRORClick,��Error���1�R��3��1���
)��Top = 0
Left = 0
Height = 24
Width = 26
FontBold = .T.
FontName = "Courier New"
FontSize = 11
Caption = "|<"
TabIndex = 1
ToolTipText = "Top"
Name = "cmdTop"
cmdokbuttons.vcx
commandbutton	cmdCancel�PROCEDURE Click
THIS.Parent.BeforeRecordPointerMoved

GO TOP

THIS.Parent.RecordPointerMoved
THIS.Parent.EnableDisableButtons

ENDPROC
PROCEDURE Error
Parameters nError, cMethod, nLine
This.Parent.Error(nError, cMethod, nLine)
ENDPROC
vcr.cmdTop
commandbutton
commandbutton�skiptable The table to move the record pointer in .
enabledisableoninit
*recordpointermoved Method called each time the record pointer is moved, basically providing a new event for the class.
*enabledisablebuttons 
*beforerecordpointermoved 
���� ��E�%�B�U�4��������T��C��8���T���CC�>�8�������(����t�T���C�	 ����	B����UTCSTRINGTNMAXLENGTHILNADD	LNMAXTABSJ4��%�C�\�����:�T��C�C�\���\���	B����UTCSTRING�T���a��X%�CC�WINDIR5�\SYSTEM32\MAPI32.DLL0
�%CC�WINDIR5�\SYSTEM\MAPI32.DLL0
	����S��C�GIt does not appear that you have MAPI installed. Mail could not be run.�x��B�-���
�����UTHIS
LOGSESSIONOLEMSESSSIGNON.�������CCE�0�x��T���-��UNERRORCMETHODNLINETHIS
LOGSESSIONT���-��UTHIS
LOGSESSIONaddtabs,��	strippath���signon8��Error4��Init���1��q�q1A�2qq�A�2��1qA�3���2�18
X��">�!��&)�	container??��%tcWidth = 25
Height = 25
BorderWidth = 0
TabIndex = 1
BackColor = 192,192,192
Name = "mailbtn"
H�;���!�CC�	Bu.logsession
*addtabs 
*strippath 
*signon 
����������
commandbutton�������������������������������������������
commandbutton�������������������������������������������cmdMail�������������������������������������������������mailbtn.������������������������������������������������pTop = 0
Left = 0
Height = 25
Width = 25
Picture = smmail.bmp
Caption = ""
TabIndex = 1
Name = "cmdMail"
��������
olecontrol��3ҹ������2���3ҹ������!������|�8�t
	container, 0, 9, 5, 13, 11, 11, 2, 0
RVED1MIX��� ??%r%t�*��U@#%�C�THISFORM.PARENTb�O��*�<���9�<���UTHISFORMSETTHISFORM������
H�������1����
H�;���!�CC�	Buffering������R������(�CC.��N�T��C�/��%�C��_C����J�~T��C�Data in ��was changed by another user��(Do you want to save your changes anyway?�4�
Data Conflict�x��%�����4���C-a����F�
��C-�������!�CC�	Buffering��������T��C����+������������(�CC.����T��C�/��%�C��_C������~T��C�Data in ��was changed by another user��(Do you want to save your changes anyway?�4�
Data Conflict�x��%�����m���C-a�����
��C-�������T��C�������UNERRORCMETHODNLINENFIELDCFIELDNCHOICECR_LOCNRECClick,��Error���11q�qA3��!���q����AAA!��q����AAAAAA2i��	)?{Width = 104
Height = 24
BorderWidth = 1
BackColor = 192,192,192
skiptable = 
enabledisableoninit = .T.
Name = "vcr"
mailbtnOLEMAPixelsMETHODSM9..\solution\ole\smmail.bmpOPERTIESM1..\solution\ole\smmail.bmpJNAMEM)'MAPI button to send the current record.Class
TIMESTAMPN
4mPLATFORMC	container���5����G���;�|�����������������2mailbtn���e���jZW��~P�)���O���_^�����U���,OLEObject = C:\WINDOWS\SYSTEM\MSMAPI32.OCX
�t5jW��~
��ࡱ�>��	������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry������������u�OleObjectData����%AccessObjSiteData&������������\ChangedProps�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������,� ���DEST��\$8mgkgtgnnmnmninigthkgogggvmkhinjggnvm��Fk�
������U�jQRW��~jj
W��~PjW��~PW��ITop = -1000
Left = -1000
Height = 100
Width = 100
Name = "olemSess"
蛳��GҸ�U9�9���=�W�3���$�L�U�;��Pyћ�A�(�$�mailbtn.t j� QR�l�����Zd�����ɋ\�F5P�p�-������Hq��olemSess,M� ���(�p)T$4�6߰�b�4Qe����q�rr��j��
olecontrol��_^[��]�V���W�����u�|$�t�T$���A������
olecontrolE�3ۉ]��E�j�U��0�N�L���t#�E��}؍U؍M�0�� ,OLEObject = C:\WINDOWS\SYSTEM\MSMAPI32.OCX
���~�A$
��ࡱ�>��	������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry�������� 5���u�OleObjectData����)AccessObjSiteData&������������\ChangedProps�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������,� ���DEST��\$8mgkgtgnnmnmninigthkgogggvmkhinjggnvm�M��ؐ�UԋE��0�N�CS���M��O��E�9]�u�_^[��]�U���(ITop = -1000
Left = -1000
Height = 100
Width = 100
Name = "oleMmess"
iޠ��r��"v�$�t�V��_"�u(�=�=5�]`�Y�,�"mailbtn.tw�h�Q!1��#�$�=-M �Q"�2ѐ��c'�(:��P��-5�1oleMmessQ���)�-N�#P�H0�@0s@�h�P�pl�HQ�@,4˱���@,Q��-
olecontrol)�������o}����3���������U���SVW������ ����%�)D��UX�������CCE�0�x��%������@��������T����-��UNERRORCMETHODNLINETHISPARENT
LOGSESSIONOLEMSESSSIGNOFF��������5��%�CC&���i�9��C�*No table is open in the current work area.�0�x��B����%�C���
����B��%����	����T���
����������C��
���
T����������(�C��
����6�%�CC���
>����2�T��CC���
>����������
��
T����������(�C��
����M�T��CCC���
f���&T���C��: ������!if !isnull(&lvFieldValue)�,�
H���(�B�C���
�N�C���
�B�C���
�F��j�GlcMessageText = lcMessageText + alltrim(str(&lvFieldValue))+chr(13)
�C���
�Y����NlcMessageText = lcMessageText+"$"+alltrim(str(&lvFieldValue,10,2))+chr(13)
.�C���
�C�C���
�M��@�@lcMessageText=lcMessageText + alltrim(&lvFieldValue)+chr(13)
�C���
�G����\T����EGeneral fields are not supported in this example and will be skipped.C�
 ���C���
�D���GlcMessageText=lcMessageText + alltrim(DTOC(&lvFieldValue))+chr(13)	
�C���
�T��y�HlcMessageText = lcMessageText + alltrim(TTOC(&lvFieldValue))+chr(13)
�C���
�L����if &lvFieldValue���T����TRUEC�
 �����T����FALSEC�
 ���2�(�2T����Field could not be printed.C�
 ����I�T����NULL�����T���
�����:T���
��CCC&�����: �Record #CCCOZ�����C����
���%����	�������������UJLNMAXLENGTHI
LCMESSAGETEXTLVFIELDVALUEARRAYTHISPARENTSIGNON
LOGSESSIONOLEMMESS	SESSIONIDOLEMSESS
PADBFIELDSCOMPOSEADDTABSMSGNOTETEXT
MSGSUBJECT	STRIPPATHSENDSIGNOFFError,��Click���1��1A3�qs��A�QAA1������AA���a�!q������q�������A�!A�QAAa�a1AAA2��S
)���C����
���%���^PROCEDURE Error
LPARAMETERS nError, cMethod, nLine
=messageb(message(),48)
IF this.parent.logsession 
	this.parent.OLEMSess.signoff
ENDIF
this.parent.logsession = .F.

ENDPROC
PROCEDURE Click
*:*********************************************************************
*:
*: 	   Class file: \samples\ole\mapibtn.vcx
*:
*:         System: OLE
*:         Author: Microsoft Corporation
*:		  Created: 01/04/95
*:	Last modified: 04/13/95
*:
*:
*:*********************************************************************
* This is sample class which demonstrates how to use the MAPI controls. 
*
* It starts a new Mail session, collects data from the current record, 
* and brings up the Send Mail dialog with the data inserted as the 
* message text.
*
* To use this example, add this class to a form. You will need to open a
* table before pressing the Send Mail button. This will work with any 
* Visual FoxPro table. 
*
* This class includes two custom methods addtabs and strippath for
* formatting the information gathered from the table and inserted in the
* mail message.
*
* This class also takes advantage of another custom method called "signon" 
* as well as a custom property called logsession. This method and property
* are necessary for proper error handling of the MAPI server (i.e. MSMail,
* Exchange, etc.)
*
* This class also uses the smmail.bmp and next.bmp as the icons of the button
* controls.
*
* In order for this button to function properly MSMAPI32.OCX must be 
* correctly registered in the registration database and a mail 
* application supported by the MAPI controls must be installed. The 
* MAPI controls do not work with Windows for Workgroups or Windows 3.1.
*
***********************************************************************

local j, lnMaxLength, i, lcMessageText, lvFieldValue
** j & i are counters

private array paDBFields

*** Localizable Strings
#DEFINE DBF_NOT_FOUND_LOC	"No table is open in the current work area."
#DEFINE GEN_UNSUPPORT_LOC	"General fields are not supported in this example and will be skipped."
#DEFINE _FALSE_LOC			"FALSE"
#DEFINE _TRUE_LOC			"TRUE"
#DEFINE _NULL_LOC			"NULL"
#DEFINE _DOLLARSIGN_LOC		"$"
#DEFINE FLD_NO_PRINT_LOC	"Field could not be printed."
#DEFINE RECORDNUM_LOC		"Record #"

* Verify that a table is open in the current work area
if empty(dbf())
	=messagebox(DBF_NOT_FOUND_LOC,48)
	return
else
	IF !this.parent.signon()			&& Use the custom method
		RETURN
	ENDIF
	IF this.parent.LogSession	&& Check if the user was able to login
		this.parent.OleMMess.sessionid=this.parent.OleMSess.sessionid
	
		* Get the number of fields in the current table
		=afields(paDBFields)

		**** find the longest field string for approximate formatting purposes
		lnMaxLength = 0
		for j = 1 to alen(paDBFields,1)
			if len(paDBFields(j,1))+2 > lnMaxLength
				lnMaxLength = len(paDBFields(j,1))+2
			endif
		endfor
	
		* Start a new mail message and build the text
		this.parent.OleMMess.compose
		lcMessageText=""
		for i = 1 to alen(paDBFields,1)
			lvFieldValue=alltrim(upper(paDBFields(i,1)))
			lcMessageText=lcMessageText+this.parent.addtabs((lvFieldValue+": "),lnMaxLength)
			if !isnull(&lvFieldValue)
				do case
					case paDBFields(i,2)= "N" or paDBFields(i,2)= "B" or paDBFields(i,2)= "F"
						lcMessageText = lcMessageText + alltrim(str(&lvFieldValue))+chr(13)
					case paDBFields(i,2) = "Y"
						lcMessageText = lcMessageText+_DOLLARSIGN_LOC+alltrim(str(&lvFieldValue,10,2))+chr(13)
					case paDBFields(i,2)= "C" or paDBFields(i,2) = "M"
						lcMessageText=lcMessageText + alltrim(&lvFieldValue)+chr(13)
					case paDBFields(i,2)= "G"
						lcMessageText=lcMessageText+GEN_UNSUPPORT_LOC+chr(13)
					case paDBFields(i,2) = "D"
						lcMessageText=lcMessageText + alltrim(DTOC(&lvFieldValue))+chr(13)	
					case paDBFields(i,2) = "T"
						lcMessageText = lcMessageText + alltrim(TTOC(&lvFieldValue))+chr(13)
					case paDBFields(i,2) = "L"
						if &lvFieldValue
							lcMessageText = lcMessageText+_TRUE_LOC+chr(13)
						else
							lcMessageText = lcMessageText+_FALSE_LOC+chr(13)
						endif
					otherwise
						lcMessageText = lcMessageText+FLD_NO_PRINT_LOC+chr(13)				
				endcase
			else
				lcMessageText=lcMessageText+_NULL_LOC
			endif
		endfor
		this.parent.OleMMess.msgnotetext=lcMessageText
		this.parent.OleMMess.msgsubject=this.parent.strippath(alltrim(dbf()))+": "+RECORDNUM_LOC+alltrim(str(recno()))
		this.parent.OleMMess.send(1)
		IF this.parent.logsession
			this.parent.OleMSess.signoff
		ENDIF	&& Session Handle test
	ENDIF 		&& Login Test
endif			&& DBF Test
	
ENDPROC
8�s`�m����� ���j�K`����� ���%D{�U6#%�C�_VFP.ActiveFormb�O��/���C����U
ACTIVEFORMREFRESHP�����%�C+��7���C�Enabled-����B��T��CO��#)�T��CO��#6�T��CO��	#����
H��I��������T����-��T����-��T����a��T��	��a�������)�T����a��T����a��T����-��T��	��-��2�I���C�Enableda�����U
NRECNTOPNBOTTOMTHISSETALLCMDTOPENABLEDCMDPRIORCMDNEXT	CMDBOTTOM'%�C���
�� �
F������UTHIS	SKIPTABLE�4����
H�������
����)T��C�DBF�
Select Table:�Open���%�C�0����F��
Q����T���C�����T����������1���T��C�����%������*R,�� Unable to resolve data conflict.���2���fT�	��Error Number: CC�Z�C�
 C�
 �Error Message: CEC�
 C�
 �Procedure: C�t��T�
�C�	�2�x��
H�������
��������
�����X�2���B���UNERRORCMETHODNLINE	CNEWTABLETHIS	SKIPTABLENCONFLICTSTATUSDATACHECKER1CHECKCONFLICTSLCMSGLNANSWER!%������
�����UTHISENABLEDISABLEONINITENABLEDISABLEBUTTONSrecordpointermoved,��enabledisablebuttons{��beforerecordpointermoved!��Error]��Init���11�A3���AA�Q�Q�����A21�A3��������A!D�A�fA�AA�AAA3�A1a���!$#=�	*@�	9
_)�
DPROCEDURE recordpointermoved
IF TYPE('_VFP.ActiveForm') = 'O'
	_VFP.ActiveForm.Refresh
ENDIF

ENDPROC
PROCEDURE enabledisablebuttons
LOCAL nRec, nTop, nBottom
IF EOF() && Table empty or no records match a filter
	THIS.SetAll("Enabled", .F.)
	RETURN
ENDIF

nRec = RECNO()
GO TOP
nTop = RECNO()
GO BOTTOM
nBottom = RECNO()
GO nRec

DO CASE
	CASE nRec = nTop
		THIS.cmdTop.Enabled = .F.
		THIS.cmdPrior.Enabled = .F.
		THIS.cmdNext.Enabled = .T.
		THIS.cmdBottom.Enabled = .T.
	CASE nRec = nBottom
		THIS.cmdTop.Enabled = .T.
		THIS.cmdPrior.Enabled = .T.
		THIS.cmdNext.Enabled = .F.
		THIS.cmdBottom.Enabled = .F.
	OTHERWISE
		THIS.SetAll("Enabled", .T.)
ENDCASE
ENDPROC
PROCEDURE beforerecordpointermoved
IF !EMPTY(This.SkipTable)
	SELECT (This.SkipTable)
ENDIF

ENDPROC
PROCEDURE Error
Parameters nError, cMethod, nLine
#define NUM_LOC "Error Number: "
#define PROG_LOC "Procedure: "
#define MSG_LOC "Error Message: "
#define CR_LOC CHR(13)
#define SELTABLE_LOC "Select Table:"
#define OPEN_LOC "Open"
#define SAVE_LOC "Do you want to save your changes anyway?"
#define CONFLICT_LOC "Unable to resolve data conflict."

DO CASE
	CASE nError = 13 && Alias not found
	*-----------------------------------------------------------
	* If the user tries to move the record pointer when no
	* table is open or when an invalid SkipTable property has been
	* specified, prompt the user for a table to open.
	*-----------------------------------------------------------
		cNewTable = GETFILE('DBF', SELTABLE_LOC, OPEN_LOC)
		IF FILE(cNewTable)
			SELECT 0
			USE (cNewTable)
			This.SkipTable = ALIAS()
		ELSE
			This.SkipTable = ""
		ENDIF
	CASE nError = 1585 
	*-----------------------------------------------------------
	* Update conflict handled by datachecker class.
	*-----------------------------------------------------------
		nConflictStatus = THIS.DataChecker1.CheckConflicts()
		IF nConflictStatus = 2
			WAIT WINDOW CONFLICT_LOC
		ENDIF
	OTHERWISE
	*-----------------------------------------------------------
	* Display information about an unanticipated error.
	*-----------------------------------------------------------
		lcMsg = NUM_LOC + ALLTRIM(STR(nError)) + CR_LOC + CR_LOC + ;
				MSG_LOC + MESSAGE( )+ CR_LOC + CR_LOC + ;
				PROG_LOC + PROGRAM(1)
		lnAnswer = MESSAGEBOX(lcMsg, 2+48+512)
		DO CASE
			CASE lnAnswer = 3 &&Abort
				CANCEL
			CASE lnAnswer = 4 &&Retry
				RETRY
			OTHERWISE
				RETURN
		ENDCASE
ENDCASE

ENDPROC
PROCEDURE Init
IF THIS.EnableDisableOnInit
	THIS.EnableDisableButtons
ENDIF
ENDPROC
�PROCEDURE addtabs
parameters tcString, tnMaxLength
#DEFINE TABSPACES	8 	&& Number of characters that will equal 1 TAB
local i, lnAdd, lnMaxTabs
lnMaxTabs=int(tnMaxLength/TABSPACES)+1
lnAdd = lnMaxTabs - INT(len(tcString)/TABSPACES)
for i = 1 to lnAdd
	tcString = tcString + chr(9)
endfor
return tcString
ENDPROC
PROCEDURE strippath
parameters tcString
IF RAT( "\", tcString) > 0
	tcString = SUBSTR( tcString, RAT( "\", tcString) + 1 )
ENDIF
return tcString
ENDPROC
PROCEDURE signon
#DEFINE ERR_NOMAPI_LOC	"It does not appear that you have MAPI installed. Mail could not be run."

this.logsession = .T.

IF !FILE(GETENV("WINDIR")+"\SYSTEM32\MAPI32.DLL");
	AND !FILE(GETENV("WINDIR")+"\SYSTEM\MAPI32.DLL")
	MESSAGEBOX(ERR_NOMAPI_LOC)
	RETURN .F.
ENDIF

this.OLEMSess.signon

ENDPROC
PROCEDURE Error
LPARAMETERS nError, cMethod, nLine
=messageb(message(),48)
this.logsession = .F.
ENDPROC
PROCEDURE Init
this.logsession = .F.
ENDPROC
le = 
enabledisableoninit = .T.
Name = "vcr