// The example shows a simple help system based on
// ReadVar(). When the F1 key is pressed, help text is
// displayed using MemoEdit() and information stored in
// a memo file. Depending on the #define constant DEBUG,
// the help text can be edited or just displayed at runtime.
// Using this technique, help text can be written at runtime
// during development of a program while the delivery version
// of the program only allows help text to be displayed.
#include "Inkey.ch"
#define DEBUG // help texts can be edited at runtime
PROCEDURE Main
LOCAL nMainMenu
IF ! File("HELP.DBF")
DbCreate("HELP", { { "READVAR" , "C", 10, 0} ,;
{ "HELPTEXT", "M", 10, 0} } )
USE HELP NEW EXCLUSIVE
INDEX ON Readvar TO HELP
ENDIF
SET KEY K_F1 TO Help
DO WHILE .T.
@ 10,10 PROMPT "Customer screen"
@ 11,10 PROMPT "Parts screen"
MENU TO nMainMenu
DO CASE
CASE nMainMenu == 0
CLOSE ALL
EXIT
CASE nMainMenu == 1
Customers()
CASE nMainMenu == 2
Parts()
ENDCASE
ENDDO
RETURN
*******************
PROCEDURE Customers
CLS
USE Customer NEW
@ 10,10 SAY " Last name:" GET Customer->Lastname
@ 11,10 SAY "First name:" GET Customer->Firstname
READ
CLOSE Customer
RETURN
***************
PROCEDURE Parts
CLS
USE Parts NEW
@ 10,10 SAY "Part No:" GET Parts->PartNo
@ 11,10 SAY " Part:" GET Parts->Part
READ
CLOSE Parts
RETURN
**************
PROCEDURE Help
LOCAL nArea := Select()
IF Select("HELP") == 0
USE Help INDEX Help NEW
ENDIF
SELECT Help
SEEK Upper( ReadVar() )
IF Found()
ShowHelpText( Help->HelpText )
ELSE
#ifdef DEBUG
APPEND BLANK
REPLACE Help->Readvar WITH Upper( ReadVar() )
ShowHelpText( Help->HelpText )
#else
ShowHelpText("No help available")
#endif
ENDIF
DbSelectArea( nArea )
RETURN
**********************
PROCEDURE ShowHelpText( cHelpText )
LOCAL cScreen := SaveScreen( 2, 2, 22,78 )
DispBox( 2, 2,22,78, 2 )
#ifdef DEBUG // help texts can be edited
REPLACE Help->HelpText WITH ; // in the DEBUG version
MemoEdit(cHelpText, 3, 3, 21, 77, .T. )
#else
SET CURSOR OFF // help texts can only be
// displayed in the
// delivery version
MemoEdit(cHelpText, 3, 3, 21, 77, .F.)
#endif
RestScreen(2, 2, 22, 78, cScreen)
SET CURSOR ON
RETURN