Page 1 of 1
hb_hrbRun and some functions inside ...
Posted: Mon Feb 20, 2012 5:40 pm
by Rimantas
Hi ,
Antonio , how to run in the same script some functions ? This is possible ? I did through script mdi child window with xbrowse and buttonbar . Buttonbar's buttons direct to function navigate_keys( VK_F5 ) ( as a sample ) . The same is in mdi child description - oWnd:bKeyDown := { | nKey, nFlags | navigate_key( nKey ) } ... In both situations - pressing needfull key on mdi child or pressing buttonbar I'm getting "Undefined function NAVIGATE_KEY" ... I tried REQUEST NAVIGATE_KEY in the prg ( script ) , the same bad result ...

.
At this moment I'm seeing that prg as script can run only one single function inside prg . Maybe some functions can be running in a script with other compiler options ?
Many thanks in advance !
Re: hb_hrbRun and some functions inside ...
Posted: Tue Feb 21, 2012 12:47 am
by Antonio Linares
Rimantas,
function navigate_keys( VK_F5 )
There is a typo in the name (missing "s"), check it
oWnd:bKeyDown := { | nKey, nFlags | navigate_key( nKey ) }
Re: hb_hrbRun and some functions inside ...
Posted: Tue Feb 21, 2012 4:53 am
by Rimantas
Antonio Linares wrote:Rimantas,
function navigate_keys( VK_F5 )
There is a typo in the name (missing "s"), check it
oWnd:bKeyDown := { | nKey, nFlags | navigate_key( nKey ) }
No , Antonio , in mine source the function name is the same . I did mistake only here , describing problem .
Re: hb_hrbRun and some functions inside ...
Posted: Tue Feb 21, 2012 8:52 am
by Antonio Linares
Rimantas,
Using FWH\samples\scripts.prg, this example works fine:
Code: Select all | Expand
#include "FiveWin.ch"
function Test()
Another()
return nil
function Another()
OneMore()
return nil
function OneMore()
MsgInfo( "Hello from OneMore()" )
return nil
Re: hb_hrbRun and some functions inside ...
Posted: Tue Feb 21, 2012 11:39 am
by Rimantas
Antonio Linares wrote:Rimantas,
Using FWH\samples\scripts.prg, this example works fine:
Code: Select all | Expand
#include "FiveWin.ch"
function Test()
Another()
return nil
function Another()
OneMore()
return nil
function OneMore()
MsgInfo( "Hello from OneMore()" )
return nil
I can confirm that is working . Let describe the problem better . I mentioned , mine script create mdi child with xbrowse and button bar . Also I can say that buttonbar of mdi child window is in other function in the same prg . But all other functions in the same prg will became "undefined" after ACTIVATE WINDOW oWnd ... I don't know really , but it can be related to hb_hrbRun / hb_hrbDo lifetime or something similar ... Now prg as script run :
Code: Select all | Expand
function Run_prg( cPrg )
local oRun
local lRet := .t.
local lCompile := .f.
local dPrdDate, dHrbDate
local cPrgTime, cHrbTime
local cTxtFile, cLine, nFrom := 1
local cLog := cProgr_logai + "\hcmp" + alltrim( cVart_id ) + ".log"
local nHrb_hdl
if !jungtis_serveris()
return( .f. )
endif
if file( cProgr_kelias + cPrg + ".prg" )
TRY
if File( cLog )
ferase( cLog )
endif
FReOpen_Stderr( cLog, "w" )
oRun := HB_compilebuf( HB_ARGV( 0 ), cProgr_kelias + cPrg + ".prg", "-n", "-i" + cPagr_kelias + "fwh_incl;" + cPagr_kelias + "hrb_incl" )
cTxtFile := MemoRead( cLog )
if empty( cTxtFile )
if !Empty( oRun )
BEGIN SEQUENCE
bOldError = ErrorBlock( { | o | DoBreak( o ) } )
[color=#FF0000]
nHrb_hdl := hb_hrbload( oRun )
hb_hrbDo( nHrb_hdl )
hb_hrbunload( nHrb_hdl )
[/color]
//hb_HrbRun( oRun )
END SEQUENCE
ErrorBlock( bOldError )
else
MsgInf( "Can't to generate file ... :-( ", 2 )
endif
else
WinExec( "Notepad " + cLog )
endif
CATCH e
lRet := .f.
END
else
MsgInf( "Can't to find file - " + cProgr_kelias + cPrg + ".prg ...", 2 )
lRet := .f.
endif
if !empty( oRun )
oRun := NIL
endif
return( lRet )
In red - script run and then unload . The engine of scripts nothing know about mdi child window inside script ... And , as I mentioned , all other functions in script became "undefined" . Maybe exist other way to run script with windows ?
Re: hb_hrbRun and some functions inside ...
Posted: Tue Feb 21, 2012 11:51 am
by Antonio Linares
Rimantas,
As soon as you call hb_hrbunload( nHrb_hdl ) then you "unload" the scripts functions.
You have to call hb_hrbunload( nHrb_hdl ) once you are done with those functions and you will no longer use those functions again.
Re: hb_hrbRun and some functions inside ...
Posted: Tue Feb 21, 2012 12:18 pm
by Rimantas
Antonio Linares wrote:Rimantas,
As soon as you call hb_hrbunload( nHrb_hdl ) then you "unload" the scripts functions.
You have to call hb_hrbunload( nHrb_hdl ) once you are done with those functions and you will no longer use those functions again.
The problem is that , I commented all "unload" places .
// hb_hrbUnload( nHrb_hdl ) and // oRun := NIL and etc. .
The same result .
Tested only hb_hrbRun( oRun ) , then with hb_hrbDo( nHrb_hdl ) .
Nothing changes , "undefined" after ACTIVATE WINDOW ...
Re: hb_hrbRun and some functions inside ...
Posted: Tue Feb 21, 2012 12:59 pm
by Antonio Linares
Rimantas,
Please provide me a small script example to reproduce it here, thanks
Re: hb_hrbRun and some functions inside ...
Posted: Tue Feb 21, 2012 5:11 pm
by Rimantas
Antonio Linares wrote:Rimantas,
Please provide me a small script example to reproduce it here, thanks
Of course , that I must did alreday ....

Excuse .
Code: Select all | Expand
#include "FiveWin.ch"
#include "xbrowse.ch"
static oWnd, oBrw
function script_mdiw()
USE ( "SALES" ) NEW ALIAS "SALES"
DEFINE WINDOW oWnd MDICHILD OF WndMain() TITLE "Script problem with MDI CHILD window"
@ 0, 0 XBROWSE oBrw OF oWnd ALIAS Alias() AUTOCOLS AUTOSORT LINES CELL
oBrw:CreateFromCode()
oWnd:oClient := oBrw
oWnd:bInit := { || make_bar( oWnd ), oBrw:SetFocus() }
oWnd:bValid := { || ( oBrw:cAlias )->( dbclosearea() ), .t. }
oWnd:bKeyDown := { | nKey, nFlags | wind_keyp( nKey ) }
oWnd:Activate( "NORMAL" )
return( NIL )
static function make_bar( oWnd )
local oBut[ 3 ], oBar
DEFINE BUTTONBAR oBar SIZE nButSiz, nButSiz OF oWnd TOP 3D
DEFINE CURSOR oBar:oCursor HAND
DEFINE BUTTON oBut[ 1 ] OF oBar FILE "c:\fwh\bitmaps\16x16\delete.bmp" ;
MESSAGE "Delete record - Del" ACTION wind_keyp( VK_DELETE )
DEFINE BUTTON oBut[ 2 ] OF oBar FILE "c:\fwh\bitmaps\16x16\search.bmp" ;
MESSAGE "Find - F9" ACTION wind_keyp( VK_F9 )
DEFINE BUTTON oBut[ 3 ] OF oBar FILE "c:\fwh\bitmaps\16x16\print.bmp" ;
MESSAGE "Print - F5" ACTION wind_keyp( VK_F5 )
return( NIL )
function wind_keyp( nKey )
MsgInfo( nKey )
return( NIL )
Simply run this code as script , it can be done and from your scripts sample in fwh\samples folder .
Re: hb_hrbRun and some functions inside ...
Posted: Tue Feb 21, 2012 5:59 pm
by Rimantas
Antonio ,
It seems that something I found ...

Maybe it's not clear , but working . I created 2 vars in the main prg : nMain_hrb and aHrb empty array . Now in excute section I added that :
Code: Select all | Expand
nMain_hrb := hb_hrbload( oRun )
hb_hrbDo( nMain_hrb )
u := ascan( aHrb, { |x| x[ 1 ] == 0 } )
if u == 0
aadd( aHrb, { nMain_hrb, oRun } )
else
aHrb[ u, 1 ] := nMain_hrb
aHrb[ u, 2 ] := oRun
endif
Then added function in main prg :
Code: Select all | Expand
function harb_unload( nHrb )
local u := ascan( aHrb, { |x| x[ 1 ] == nHrb } )
if u # 0
hb_hrbUnload( nHrb )
aHrb[ u, 1 ] := 0
aHrb[ u, 2 ] := NIL
endif
return( NIL )
In script prg at the beginning of source I direccted : local nHrb := nMain_hrb
In bValid of oWnd added : oWnd:bValid := { || ( cwAlias )->( dbclosearea() ), harb_unload( nHrb ), .t. }
Now I can say that other functions are working with MDI Child enviroment . Some undoubts - it must be directed vars with values and unload of scripts ...

Maybe you can suggest more clear method ?
Re: hb_hrbRun and some functions inside ...
Posted: Wed Feb 22, 2012 9:22 pm
by Antonio Linares
Rimantas,
It seems as a fine way to manage several loaded scripts
