Friends,
Try modify this sample:
TheHelp.prg
Code: Select all
// Sample showing how to work with new help techniques from FiveWin.
#include "FiveWin.ch"
#include "NewHelp.ch"
#include "Inkey.ch"
#define SRCPAINT 15597702 // 0xEE0086
#define SRCAND 8913094
#define GWW_ID -12
static oBmp1, oBmp2, oFont
function Main()
local oDlg, oBtn, oCursor
local cName := PadR( "Hello" , 30 )
local cAddress := PadR( "World!", 30 )
REQUEST DBFCDX
rddsetdefault( "DBFCDX" )
// SetKey( VK_F1, { | nKey | TheHelp( CtrlSearch(oDlg) ) } )
DEFINE CURSOR oCursor RESOURCE "Help"
DEFINE BITMAP oBmp1 RESOURCE "Genie1"
DEFINE BITMAP oBmp2 RESOURCE "Genie2"
DEFINE FONT oFont NAME "Arial" SIZE 0, -9
SET _3DLOOK ON
DEFINE DIALOG oDlg RESOURCE "Test"
REDEFINE GET oGet1 VAR cName ID ID_NAME OF oDlg HELPID ID_NAME
REDEFINE GET oGet2 VAR cAddress ID ID_ADDRESS OF oDlg HELPID ID_ADDRESS
//
oGet1:bKeyDown := {|nKey,bFlags| iif( nKey==VK_F2, TheHelp( CtrlSearch(oDlg) ), .t.) }
oGet2:bKeyDown := {|nKey,bFlags| iif( nKey==VK_F2, TheHelp( CtrlSearch(oDlg) ), .t.) }
//
ACTIVATE DIALOG oDlg CENTERED
RELEASE OBJECTS oCursor, oBmp1, oBmp2, oFont
return nil
function TheHelp( idCtrl )
local cProcName := Padr(ProcName( 1 ),10)
local nProcLine := 0 // ProcLine( 0 )
local cProcCtrl := StrZero( idCtrl, 4 )
local cTexto := Space( 200 )
local aStru
if !file( "HELP.DBF" )
aStru := { { "PROG" ,"C" ,10 , 0 } , ;
{ "LINHA" ,"C" , 6 , 0 } , ;
{ "VARIAVEL","C" , 4 , 0 } , ;
{ "TEXTO" ,"M" ,10 , 0 } }
dbCreate( "HELP.DBF", aStru )
endif
use help new
if !file( "HELP.CDX" )
index on prog+linha+variavel to help
endif
set index to help
dbGotop()
dbSeek( cProcName+StrZero(nProcLine,6)+cProcCtrl )
if !found()
MsgGet( "Digite uma ajuda", "Conteudo:", @cTexto )
dbAppend()
help->PROG := cProcName
help->LINHA := STRZERO(nProcLine,6)
help->VARIAVEL := cProcCtrl
help->TEXTO := cTexto
else
cTexto := TEXTO
MsgFancy( If( Empty( cTexto ), "Sorry, I am a very limited Genius...", Alltrim( cTexto ) ) )
endif
close help
return nil
/*
* SOURCE: NewHelp.prg
*/
function MsgFancy( cMsg )
local oDlg, oBrush
DEFINE BRUSH oBrush STYLE NULL // Transparent painting !
DEFINE DIALOG oDlg FROM 2, 2 TO 20, 60 BRUSH oBrush STYLE WS_POPUP
ACTIVATE DIALOG oDlg CENTERED ;
ON PAINT ( PalBmpDraw( oDlg:hDC, 0, 0, oBmp2:hBitmap, 0, 0, 0, SRCPAINT ),;
PalBmpDraw( oDlg:hDC, 0, 0, oBmp1:hBitmap, 0, 0, 0, SRCAND ),;
oDlg:Say( 3.7, 10, cMsg,,, oFont ) ) ;
ON LEFT CLICK oDlg:End()
return nil
/*
* SOURCE: TestFoc2.prg
*/
function CtrlSearch(oDlgActive)
local nAt := AScan( oDlgActive:aControls, { | oCtrl | oCtrl:lFocused } )
return nAt
TheHelp.rc
Code: Select all
#include "WinApi.ch"
#include "NewHelp.ch"
help CURSOR "../cursors/help.cur"
genie1 BITMAP "../bitmaps/genie1.bmp"
genie2 BITMAP "../bitmaps/genie2.bmp"
test DIALOG 28, 66, 171, 68
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Press help and then click a control"
FONT 8, "Arial"
BEGIN
LTEXT "&Name:", -1, 14, 11, 22, 8
EDITTEXT ID_NAME, 37, 10, 130, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP
LTEXT "&Address:", -1, 5, 27, 29, 8
EDITTEXT ID_ADDRESS, 37, 25, 130, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP
PUSHBUTTON "&Ok", ID_OK, 15, 51, 33, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Cancel", 2, 69, 50, 33, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Help", ID_HELP, 123, 50, 33, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END
STRINGTABLE
BEGIN
ID_NAME, "Type here the name of the customer"
ID_ADDRESS, "Type here the address of your customer"
ID_OK, "Press here when you want to save this info"
IDCANCEL, "Press here if you want to cancel this operation"
ID_HELP, "As you are checking, pressing here offers help!"
END
How to use:
Code: Select all
...
SetKey( VK_F2, nil )
DEFINE DIALOG oDlg RESOURCE "dlgResource"
...
REDEFINE GET oGet1 VAR cGet1 ID 500 PICTURE "@!" OF oDlg
REDEFINE GET oGet2 VAR cGet2 ID 500 PICTURE "@!" OF oDlg
REDEFINE GET oGetN VAR cGetN ID 500 PICTURE "@!" OF oDlg
//
oGet1:bKeyDown := {|nKey,bFlags| iif( nKey==VK_F2, TheHelp( CtrlSearch(oDlg) ), .t.) }
oGet2:bKeyDown := {|nKey,bFlags| iif( nKey==VK_F2, TheHelp( CtrlSearch(oDlg) ), .t.) }
oGetN:bKeyDown := {|nKey,bFlags| iif( nKey==VK_F2, TheHelp( CtrlSearch(oDlg) ), .t.) }
...
endif
ACTIVATE DIALOG oDlg CENTERED
SetKey( VK_F2, { || AnotherYourFunction() } )
...