Page 1 of 1

Help for get when F1 pressed. Possible?

Posted: Sat Apr 12, 2008 12:44 pm
by JC
Hi again my friends!

Only a doubt... How I can define a help for a get for exhibition when the user press the F1 key?

It's possible?

Re: Help for get when F1 pressed. Possible?

Posted: Sat Apr 12, 2008 9:59 pm
by mmercado
JC wrote:Only a doubt... How I can define a help for a get for exhibition when the user press the F1 key?
1.- SetHelpFile( "YourHelpFile.hlp" )
2.- When defining the Get control you should use the clause: HELPID YourHelpTopic

Then, when user presses th F1 key, program will show the defined topic.

Notice: YourHelpTopic can be a numeric or alphameric expression according to your help file's topic definition.

Regards.

Manuel Mercado

Posted: Sun Apr 13, 2008 2:09 am
by Rochinha
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() } )
   ...