Hi Alex,

BTW, is there any AX control which works out of the box on XP?

On my system even current example doesn't work. I'd guess it
needs office, which not every ppl have.

So, is there anything built-in?

Brgds,
Viktor

On 2009 Oct 21, at 15:16, Alex Strickland wrote:

Przemysław Czerpak wrote:

It should be easy to fix it if you can create such example but I do not know if it will be easy to create such self contain example. If it's not
Harbour problem then it's impossible to create it :)
It will be good if you can make this example as simple as possible reducing any additional code, i.e. use GTWVT and windows function wrappers for hbwin
library.

You are right, this code works without GPF:

#include "hbgtinfo.ch"
#include "hbclass.ch"

REQUEST HB_GT_WVT_DEFAULT

#define WS_CHILD            1073741824
#define WS_VISIBLE          268435456
#define WS_CLIPCHILDREN     33554432

procedure main()
   local oMSCAL

   wait "Make sure we are 'Active Window'"
oMSCAL := HActiveX():Init( WAPI_GetActiveWindow(), "MSCAL.Calendar", 0, 0, 300, 300 )
   wait "Press any key to exit"
   //oMSCAL := nil
   //hb_gcAll()
   oMSCAL:Close()
return

CLASS HActiveX
   DATA oOLE
   METHOD Init
   METHOD Event
   ERROR HANDLER OnError
   //DESTRUCTOR Close
   METHOD Close
ENDCLASS

METHOD Init( hWnd, cProgId, nTop, nLeft, nWidth, nHeight, cID ) CLASS HActiveX
   local nStyle := WS_CHILD + WS_VISIBLE + WS_CLIPCHILDREN
   WIN_AxInit()
hWnd := WAPI_CreateWindowEX( 0, "AtlAxWin", cProgId, nStyle, nLeft, nTop, nWidth, nHeight, hWnd, 0 ) ::oOLE := WIN_AxGetControl( hWnd, { | event, ... | ::Event ( event, ... ) }, cID )
return self

PROCEDURE Event( ... ) CLASS HActiveX
   local cEvents := ""
   local aEvents := { ... }
aEval(aEvents, { | xEvent | cEvents += HB_ValToStr( xEvent ) + ", " } )
   wapi_OutputDebugString( cEvents )
return

METHOD OnError() CLASS HActiveX
return HB_ExecFromArray( ::oOLE, __GetMessage(), HB_AParams() )

METHOD Close() CLASS HActiveX
   wapi_OutputDebugString( "Close" )
   ::oOLE := nil
   wapi_OutputDebugString( "After Close" )
RETURN


I must explicitly call oMSCal:Close() to set ::oOLE to NIL, or else it will GPF. Is that expected behaviour?

I cannot make the DESTRUCTOR work, it is simply not called, can you see why? I tried it in the three commented lines above.

Regards
Alex
_______________________________________________
Harbour mailing list
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour

_______________________________________________
Harbour mailing list
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to