Activex y otras observaciones

26 views
Skip to first unread message

theos....@gmail.com

unread,
1:16 AM (9 hours ago) 1:16 AM
to Harbour Users
Por curiosidd, ya que a fin de año e inicio, aprecen brujitos (a) de todo tipo, se me ocurrio hacer un pequeño simple juego del tarot, pero usando lo mas basico de Harbour modo consola a lo mas usando gtwvt y hbwin. Entonces a empezar a buscar recursos, primero el mouse para ver las funcionalidades que brinda, fui a los ejemplos de Harbour, dir tests y el ejemplo MOUSE.PRG no funciona, tal vez sea WINDOWS 11 64bit y Harbour 32 bit ya que el default de la consola ahora es el Windows Teminal. Pero viendo otros ejemplo como wvtext.prg se ve que si funciona. Todo bien con los BOXs que simula una carta, y si doy un click y aparezca una imagen, un BMP. A buscar por las librerias, ni una funcion simple, en HBWIN donde era mas probable de encontrar algo como wapi_ShowImage(), en GTWVT segun include describe HB_GTI_DISPIMAGE, nicaragua. Copiloto, ayudame, chato puede ser con Activex, ya que no quieres usar C, como seria. Con el internet explorer "Shell.Explorer", en vez de darle un un url le das la ruta de una imagen. Fui al ejemplo de Harbour para ver si ya funciona pues hace tiempo vi que tenia errores. Ahora en Windows 11 parece que ya no existe ese control de "MSCAL.Calendar" por lo que da error y ademas esconde otro como: "Error BASE/1005  No existe la variable de instancia: _msgDestructor." Si el control existe y funciona bien a la ahora de cerrar objecto  HB_SYMBOL_UNUSED( oCtrl ) . Por momentos parecia que podia hacerlo en forma "limpia".  Tendre que usar un codigo simple C que vi en un ejemplo que solo muestra BMP y con la ayuda Copiloto que realize el trabajo sucio para otras funcionalidades.  Les muestro el ejemplo con otro control MSComCtl2.MonthView.2 no se si lo tendran en su maquina, pero el "Shell.Explorer" debe cajon debe existir. El problema es rastear el identificar del los Eventos de un control cundo el primer parametro deberia identificar como una cadena del nombre del evento aqui es un codigo.  
#require "hbwin"
#include "inkey.ch"
#include "hbgtinfo.ch"
#include "hbclass.ch"

#include "Fileio.ch"

#if ! defined( __HBSCRIPT__HBSHELL )
   REQUEST HB_GT_WVT_DEFAULT
   REQUEST HB_GT_WIN
#endif


PROCEDURE Main()

   LOCAL oCtrl

   #if defined( __HBSCRIPT__HBSHELL )
      hbshell_gtSelect( "GTWVT" )
   #endif
   cls

   IF (nHandle := FCREATE("errores.log", FC_NORMAL)) == -1
      ? "File cannot be created:", FERROR()
      Return
   ENDIF

   oCtrl := HActiveX():Init( wapi_GetActiveWindow(), "MSComCtl2.MonthView.2", 0, 0, 300, 200 )
   oCtrl:MonthColumns := 1
   oCtrl:MonthRows := 1
   oCtrl:Value := ctod("2026/02/01")

   INKEY(0)

   HB_SYMBOL_UNUSED( oCtrl )

RETURN

CREATE CLASS HActiveX

   VAR oOLE
   VAR hWnd
   METHOD Init( hWnd, cProgId, nTop, nLeft, nWidth, nHeight, cID )
   METHOD Event( ... )
   ERROR HANDLER OnError()
   DESTRUCTOR Close()

ENDCLASS

METHOD Init( hWnd, cProgId, nTop, nLeft, nWidth, nHeight, cID ) CLASS HActiveX

   LOCAL nStyle := WIN_WS_CHILD + WIN_WS_VISIBLE + WIN_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 aParams := { ... }
   LOCAL cEvent := ""

   // El primer parámetro suele ser el nombre del evento
   IF Len(aParams) >= 1 .AND. ValType(aParams[1]) == "N"    // "C"
      cEvent := aParams[1]
   ENDIF

   DO CASE
   CASE cEvent == 4    // "DateClick"
      Alert("DateClick - " + Valtype(aParams[2])  )

   //CASE cEvent == 3  //"DateDblClick"
   //   Alert("DateDblClick - " + Valtype(aParams[2]) )
   //CASE cEvent ==    // "GetDayBold"
   //   Alert("GetDayBold")
   CASE cEvent == 1    // "SelChange"
   //   Alert("SelChange")
   OTHERWISE
   //  ? "Evento desconocido:", cEvent , "Params:", aParams
   ENDCASE

   RETURN

METHOD OnError() CLASS HActiveX
   RETURN hb_ExecFromArray( ::oOLE, __GetMessage(), hb_AParams() )

METHOD Close() CLASS HActiveX

   wapi_DestroyWindow( ::hWnd )
   ::hWnd := NIL
   ::oOLE := NIL

   RETURN NIL
  
Reply all
Reply to author
Forward
0 new messages