Page 1 of 2

As to catch return of oActiveX:Do

Posted: Fri Jul 27, 2007 7:39 pm
by vilian
hi,

I need to catch the return of the following command:

oActiveX:Do("TerSearchReplace2","rich","",SRCH_SEARCH,N,0)

According to documentation of the TerSearchReplace2 component would have to return a numerical value.

Posted: Fri Jul 27, 2007 8:25 pm
by Antonio Linares
Vilian,

Try:

MsgInfo( oActiveX:Do("TerSearchReplace2","rich","",SRCH_SEARCH,N,0) )

Posted: Fri Jul 27, 2007 8:29 pm
by vilian
Antonio,

Already I tried thus and is returning NIL.

Posted: Mon Jul 30, 2007 6:45 pm
by vilian
Antonio,

Studying activex.prg with the aid of the Gilmer, we perceive that the Do() method treats only 4(four) parameters. But necessary TerSearchReplace2 of 5(five). We try to make thus:

nPos := ActXInvoke( ActXPdisp( oActiveX:hActiveX ),"TerSearchReplace2","rich","",SRCH_SEARCH,N,0)

But also it did not function. You can help me?

Posted: Tue Jul 31, 2007 7:43 am
by Antonio Linares
Vilian,

Are you using Harbour or xHarbour ?

Posted: Tue Jul 31, 2007 11:18 am
by vilian
Antonio,

I use xHarbour.

Posted: Tue Jul 31, 2007 12:01 pm
by Antonio Linares
Vilian,

Please do this: tlib fivehc.lib - ole.obj

then add these functions to your app:

Code: Select all

function OleGetProperty( hObj, cPropName )

   local o := TOleAuto()
   local uRet

   o:hObj = hObj
   uRet = __ObjSendMsg( o, cPropName )
   o:hObj = nil

return uRet

function OleSetProperty( hObj, cPropName, uValue )

   local o := TOleAuto()
   local uRet

   o:hObj = hObj
   uRet = __ObjSendMsg( o, "_" + cPropName, uValue )
   o:hObj = nil

return uRet 

function OleInvoke( hObj, cMethName, ... )

   local o := TOleAuto()
   local uRet

   o:hObj = hObj
   uRet = o:Invoke( cMethName, ... )
   o:hObj = nil

return uRet 

Posted: Tue Jul 31, 2007 12:32 pm
by vilian
Antonio,

Later that I made what you asked for started to occur the following error:

Code: Select all

Application
===========
   Path and name: F:\FWH\SAMPLES\pdf.exe (32 bits)
   Size: 1,306,624 bytes
   Time from start: 0 hours 0 mins 0 secs 
   Error occurred at: 07/31/07, 09:38:02
   Error description: Error /16389  E_FAIL: TERCOMMAND
   Args:
     [   1] = N   680
     [   2] = U   
     [   3] = U   
     [   4] = U   
     [   5] = U   

Stack Calls
===========
   Called from: win32ole.prg => TOLEAUTO:TERCOMMAND(0)
   Called from:  => HB_EXECFROMARRAY(0)
   Called from: win32ole.prg => TOLEAUTO:INVOKE(397)
   Called from:  => ACTXINVOKE(67)
   Called from: ACTIVEX.PRG => TACTIVEX:DO(0)
   Called from: pdf.prg => MAIN(16)

Posted: Tue Jul 31, 2007 12:51 pm
by vilian
Antonio,

I changed OleInvoke for the following one:

Code: Select all

function OleInvoke( hObj, cMethName, uPar1, uPar2, uPar3, uPar4, uPar5 )

   local o := TOleAuto()
   local uRet

   o:hObj = hObj
   IF uPar2 # NIL
      uRet = o:Invoke( cMethName, uPar1, uPar2, uPar3, uPar4, uPar5 )
   ELSE
      uRet = o:Invoke( cMethName, uPar1 )
   ENDIF
   o:hObj = nil

return uRet
The error message stopped to happen, but I continue not receiving the return correct. I tried the following one:

Code: Select all

STATIC FUNCTION EventInfo(event, aParams,oActiveX,oWnd,nKey,nx,ny)
LOCAL nSt,text:=Space(100),font:="",n

    IF Upper(event) $ "KEYPRESS"
       ? oActiveX:Do("TerSearchReplace2","rich","",SRCH_SEARCH,N,0)
    ENDIF

RETURN NIL
It did not function, then I made as a test(see bellow), but also it did not function.

Code: Select all

STATIC FUNCTION EventInfo(event, aParams,oActiveX,oWnd,nKey,nx,ny)
LOCAL nSt,text:=Space(100),font:="",n

    IF Upper(event) $ "KEYPRESS"
       ? OleInvoke(oActivex:hWnd,"TerSearchReplace2","rich","",SRCH_SEARCH,N,0)
    ENDIF

RETURN NIL

Posted: Tue Jul 31, 2007 1:39 pm
by Antonio Linares
Vilian,

> ? OleInvoke(oActivex:hWnd, ...

That is not correct, as the first parameter is NOT the hWnd.

It has to be OleInvoke( ActXPdisp( oActivex:hActiveX ), ...

Posted: Tue Jul 31, 2007 1:59 pm
by vilian
Antonio,

Very grateful. Now he was ok.

Posted: Thu Aug 02, 2007 8:37 pm
by vilian
Antonio,

Now necessary to implement keyboard key accelerator(Sample: CTRL+P to print). I made thus:

Code: Select all

oActiveX:bOnEvent := { | event, nKey | EventInfo( event, nKey ) }

STATIC FUNCTION EventInfo(event, nKey)

   IF Upper(event) $ "KEYPRESS,KEYDOWN"

        IF nKey = 80
              .....
        ENDIF

   ENDIF

RETURN NIL

event is ok, But nKey is returning NULL!

Posted: Thu Aug 02, 2007 9:46 pm
by Antonio Linares
have you tried with two params ?

oActiveX:bOnEvent := { | event, nKey1, nKey2 | EventInfo( event, nKey1, nKey2 ) }

Posted: Fri Aug 03, 2007 1:14 am
by vilian
Antonio,

Yes, i tried with four params.

oActiveX:bOnEvent := { | event, nKey1, nKey2, nKey3, nKey4 | EventInfo( event, nKey1, nKey2, nKey3, nKey4 ) }

The return is:

nKey1 = array empty
nKey2 = 1242696 ever(constant)
nKey3 = NIL
nKey4 = NIL

Posted: Fri Aug 03, 2007 6:53 am
by Antonio Linares
Vilian,

Analize the value 1242696 according to WM_KEYDOWN docs:
http://msdn2.microsoft.com/en-us/library/ms646280.aspx
unless that activex provides different parameters