Ahora podeis enviarle mensajes directamente al objeto ActiveX, por ejemplo:
oRb = oActiveX:AddRibbonBar( "first" )
or
oSettings = oActiveX:GlobalSettings
or
oActiveX:AnyProp = ...
El codigo fuente ha quedado tan bonito, que hemos decidido publicarla aqui, para que empeceis a usarla
// FiveWin ActiveX support (32/64 bits only)
// (c) FiveTech Software, todos los derechos reservados
#include "FiveWin.ch"
#define 聽HKEY_CLASSES_ROOT 聽 聽 聽 2147483648
//----------------------------------------------------------------------------//
CLASS TActiveX FROM TControl
聽 聽CLASSDATA lRegistered AS LOGICAL
聽 聽DATA 聽 hActiveX
聽 聽DATA 聽 cProgID
聽 聽DATA 聽 cString
聽 聽DATA 聽 aProperties, aMethods, aEvents
聽 聽DATA 聽 bOnEvent
聽 聽DATA 聽 oOleAuto
聽 聽METHOD New( oWnd, cProgID, nRow, nCol, nWidth, nHeight ) CONSTRUCTOR
聽 聽METHOD ReDefine( nId, oWnd, cProgID ) CONSTRUCTOR
聽 聽METHOD Do( cMethodName, uParam1, uParam2, uParam3, uParam4, uParam5 )
聽 聽METHOD Display() INLINE ::BeginPaint(), ::Paint(), ::EndPaint(), 0
聽 聽METHOD EraseBkGnd( hDC ) INLINE 1
聽 聽METHOD GetProp( cPropName ) INLINE __ObjSendMsg( ::oOleAuto, cPropName )
聽 聽METHOD Initiate( hDlg )
聽 聽
聽 聽METHOD OnEvent( nEvent, aParams )
聽 聽METHOD ReadTypes()
聽 聽METHOD ReSize( nFlags, nWidth, nHeight ) INLINE ;
聽 聽 聽 聽 聽 聽 聽ActXSetLocation( ::hActiveX, 0, 0, nWidth, nHeight )
聽 聽METHOD SetProp( cPropName, uParam1 ) INLINE __ObjSendMsg( ::oOleAuto, cPropName, uParam1 )
聽 聽 聽 聽 聽 聽 聽
聽 聽METHOD Destroy() INLINE ActXEnd( ::hActiveX ), Super:Destroy() 聽
聽 聽
聽 聽ERROR HANDLER OnError( uParam1 ) 聽 聽 聽
聽 聽 聽 聽 聽 聽 聽
ENDCLASS
//----------------------------------------------------------------------------//
METHOD New( oWnd, cProgID, nRow, nCol, nWidth, nHeight ) CLASS TActiveX
聽 聽DEFAULT oWnd := GetWndDefault(), nRow := 0, nCol := 0, nWidth := 200,;
聽 聽 聽 聽 聽 聽nHeight := 200
聽 聽::nTop 聽 聽= nRow
聽 聽::nLeft 聽 = nCol
聽 聽::nBottom = nRow + nHeight
聽 聽::nRight 聽= nCol + nWidth
聽 聽::oWnd 聽 聽= oWnd
聽 聽::nId 聽 聽 = ::GetNewId()
聽 聽::nStyle 聽= nOR( WS_CHILD, WS_VISIBLE, WS_TABSTOP )
聽 聽::cProgID = cProgID
聽 聽::cString = ActXString( cProgID )
聽 聽::Register()
聽 聽if ! Empty( oWnd:hWnd )
聽 聽 聽 ::Create()
聽 聽 聽 oWnd:AddControl( Self )
聽 聽 聽 ::hActiveX = CreateActiveX( ::hWnd, cProgID, Self )
聽 聽 聽 ::oOleAuto = TOleAuto():New( ActXPdisp( ::hActiveX ) )
聽 聽 聽 ::nTop = nRow
聽 聽 聽 ::nLeft = nCol
聽 聽 聽 ::nWidth = nWidth
聽 聽 聽 ::nHeight = nHeight
聽 聽 聽 ::ReadTypes()
聽 聽else
聽 聽 聽 oWnd:DefControl( Self )
聽 聽endif
return Self
//----------------------------------------------------------------------------//
METHOD Do( ... ) CLASS TActiveX
#ifndef __XHARBOUR__
聽 聽return __ObjSendMsg( ::oOleAuto, ... )
#else
聽 聽local aParams := hb_aParams()
聽 聽AIns( aParams, 1, ::oOleAuto, .T. )
聽 聽return hb_execFromArray( @__ObjSendMsg(), aParams ) 聽
#endif 聽
//----------------------------------------------------------------------------//
METHOD ReDefine( nId, oWnd, cProgID ) CLASS TActiveX
聽 聽DEFAULT oWnd := GetWndDefault()
聽 聽
聽 聽::nId 聽 聽 = nId
聽 聽::oWnd 聽 聽= oWnd
聽 聽::cProgID = cProgID
聽 聽::cString = ActXString( cProgID )
聽 聽::Register( nOR( CS_VREDRAW, CS_HREDRAW ) )
聽 聽
聽 聽oWnd:DefControl( Self )
return Self
//----------------------------------------------------------------------------//
METHOD Initiate( hDlg ) CLASS TActiveX
聽 聽Super:Initiate( hDlg )
聽 聽::hActiveX = CreateActiveX( ::hWnd, ::cProgID, Self )
聽 聽::oOleAuto = TOleAuto():New( ActXPdisp( ::hActiveX ) )
聽 聽::ReadTypes()
return nil
//----------------------------------------------------------------------------//
METHOD OnEvent( nEvent, aParams ) CLASS TActiveX
聽 聽local nAt := AScan( ::aEvents, { | aEvent | aEvent[ 2 ] == nEvent } )
聽 聽local cEvent := If( nAt != 0, ::aEvents[ nAt ][ 1 ], "" )
聽 聽
聽 聽if ! Empty( ::bOnEvent )
聽 聽 聽 Eval( ::bOnEvent, If( ! Empty( cEvent ), cEvent, nEvent ), aParams )
聽 聽endif 聽
return nil
//----------------------------------------------------------------------------//
METHOD ReadTypes() CLASS TActiveX
聽 聽local oReg := TReg32():New( HKEY_CLASSES_ROOT, "CLSID\" + ::cString + ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽"\InprocServer32" )
聽 聽local cTypeLib := oReg:Get( "" )
聽 聽oReg:Close()
聽 聽
聽 聽if ! Empty( cTypeLib ) .and. File( cTypeLib )
聽 聽 聽 ::aEvents = ActXEvents( cTypeLib, ::hActiveX )
聽 聽endif 聽
return nil
//----------------------------------------------------------------------------//
METHOD OnError( ... ) CLASS TActiveX
#ifndef __XHARBOUR__
聽 聽return __ObjSendMsg( ::oOleAuto, __GetMessage(), ... )
#else
聽 聽local aParams := hb_aParams()
聽 聽AIns( aParams, 1, ::oOleAuto, .T. )
聽 聽AIns( aParams, 2, __GetMessage(), .T. ) 聽
聽 聽return hb_execFromArray( @__ObjSendMsg(), aParams ) 聽
#endif 聽
//----------------------------------------------------------------------------//