OCX - ¿Cómo usar componentes ActiveX en nuestra aplicación?
Previous topic  First topic  Next topic


Los componentes denominados ActiveX, cuyo contenedor (archivo) tiene una extensión OCX, son pequeños programas construidos para realizar una tarea puntual que podremos incluir en nuestra aplicación para darle mas funcionalidad sin tener que programarla, algo así como un set de funciones o métodos agrupados para realizar una tarea específica, por ejemplo, manejar imagenes, manejar controladoras fiscales, manejar reproduccion de componentes multimedia, etc.

Los ActiveX, utilizan una tecnología llamada COM (Component Object Model) y sirve para que desde nuestra aplicación nos comuniquemos con otro programa, en este caso puntual el otro programa "no funciona" por si solo, sino que nos brinda un servicio por medio de intercambio de ordenes y de información.

Un ejemplo de aplicaciones COM que además funcionan por si mismas pueden ser Excel y Word.

Cuando nos comunicamos con Excel para manejar una planilla de calculo usando OLE, estamos haciendo algo similar a lo que podríamos hacer cuando nos comunicamos con un ActiveX: Intercambiando órdenes e información entre aplicaciones.

Para más información: https://stackoverflow.com/questions/514598/what-is-the-difference-between-com-and-ole

Hasta donde pude investigar, los controles OCX estan generalmente programados en OOP y por lo tanto, manejan Métodos y Propiedades a las cuales podemos acceder desde nuestro programa [x]Harbour.

Antes de usar los métodos incluidos en el ActiveX hay que registrar el OCX como lo haríamos con una DLL (si fuera necesario). Tambien se podría acceder a los métodos cargando el OCX dinamicamente mediante la función C llamada LoadLibrary pero es mas complicado.

Vayamos a lo mas simple, para registrar un ActiveX, Windows nos provee del siguiente comando: regsvr32



Los parámetros necesarios para nuestra tarea son:
/u para des-regristrar un OCX
/s para que no muestre la caja de dialogo con el resultado de la operacion
y en donde dice dllname iría el nombre de nuestro OCX con el path completo, salvo que el path en donde se encuentra esté accesible por el Path del sistema.

Ejemplo de registro de OCX desde la linea de comandos:


regsvr32 c:\myApplid\myActivex.ocx

Ejemplo de desisntalación del OCX

regsvr32 /u c:\myApplid\myActivex.ocx

Esta tarea tambien la podemos hacer desde nuestra aplicación en forma muy sencilla:

Ejemplo de registro de OCX desde nuestro programa:


EXECUTE FILE "regsvr32 /s c:\myApplid\myActivex.ocx" WAIT MINIMIZE

Ejemplo de desisntalación del OCX

EXECUTE FILE "regsvr32 /s /u c:\myApplid\myActivex.ocx" WAIT MINIMIZE

Una vez que tengamos registrado nuestro ActiveX, estamos en condiciones de poder invocar los métodos que él nos provee.

Para utilizar el ActiveX se debe definir un comando DEFINE ACTIVEX o @ ... ACTIVEX de MiniGui.
Otra alternativa es utilizar las funciones CreateObject y GetActiveObject (en xHarbour) o win_oleCreateObject y win_oleGetActiveObject (en Harbour).

Este comando nos dará acceso a los métodos y propiedades del ActiveX.

El comando requiere un parámetro (OCX_ProgId) que hace referencia al nombre interno del ActiveX. Si no tenemos este dato, podemos registrar la DLL y por medio de alguna tool ver el nombre asociado.

Para nuestro ejemplo usaremos una tool freeware llamada axHelper que se la puede bajar desde aqui mismo: axHelper.zip

Esta tool desarrollada por la empresa
Nir Sofer no requiere instalación y su home page es www.nirsoft.net

Una vez que bajamos la tool, entramos en ella y pedimos que nos liste todas las Claves que encuentre en la registry de Window:



Luego ordenamos por FileName y buscamos nuestro OCX, cuando lo encontramos hacemos doble click y vemos su descripción. El dato que nos interesa es el ProgID:



Entonces, la llamada a las dos funciones en nuestro ejemplo quedaria de la siguiente forma:

objeto := GetActiveObject( "ShazamMP3.cMP3File" )
y
objeto := CreateObject( "ShazamMP3.cMP3File" )

Una vez que el ActiveX esta Registrado y se ha creado el objeto ya podemos invocar los métodos contenidos en él. Veamos un ejemplo concreto cuyo fuente se puede descargar desde aqui: ActiveX.zip

Este ejemplo utiliza un ActiveX llamado ShazamMP3 creado por
Erv Walter (home site: http://ewal.net) que tiene la habilidad de informarnos sobre datos asociados a archivos MP3 de audio y a sus Tag de información interna. Los tag de informacion interna son estructuras con informacion tales como Intérprete del tema, Albun en donde se edito y algunos datos mas. En el caso de los MP3, los TAGs se alojan al final del archivo (Tag Version 1) y al principio del archivo (Tag Version 2)

El zip con el demo, ademas del código fuente del demo, contine el OCX llamado ShazamMP3.ocx, un archivo de audio llamado PruebaDeActiveX.mp3 para testear los métodos y dos DLL's requeridas por dicho OCX que deberán estar en el mismo directorio de nuestro ejecutable. Las Dll son: zlib.dll (para descompresión de Tags comprimidos) y Vbhlp32.dll (para un manejo mas efectivo en la manipulacion de bit's en VB, que es el lenguaje con que fue escrito el ActiveX ShazamMP3)

La compilación del Demo mediante QPM se realiza con un projecto de tipo EXE y no tiene ninguna rareza o particularidad.

Dentro del Source del Demo hay una explicacion de cada bloque de código relevante.

Esta es una imagen de la ejecución del demo:




Mas ayuda sobre ActiveX

Si no se conocieran los Métodos que posee el ActiveX, ´por ejemplo por falta de documentación, podemos utilizar una tool llamada OLEView.exe que generalmente viene junto con los paquetes de desarrollo de Microsoft como ser Visual Studio.



Esta tool tambien esta disponible para bajarla desde Internet en el site oficial de microsoft (
www.microsoft.com), pero si no lo lográs, podes bajarlo de aqui mismo: OleView.zip
Nota: Esta herramienta requiere la dll Iviewers.dll que tambien esta incluída en el ZIP y que deberá copiarse al directorio SYSTEM32 de Windows (o WinNT).

Expandimos la opcion All Objects y buscamos alfabeticamente nuestro OCX y con el boton derecho del mouse desplegamos un menu contextual en donde elegimos View Type Information (aquí es donde se requiere la DLL Iviewers.dll)



Dependiendo de la cantidad de clases y métodos que tenga el OCX variará la informacion que obtendremos. Notese que, al menos en nuestro ejemplo, el nombre que acusa como clase: _cID3V1Tag no es el que se usa en el programa, ya que en nuestro prg debemos codificar ID3V1Tag (sin el _c).



Por último, en el tópico siguiente se explica como utilizar controles ActiveX que utilizan un area de nuestro Form para mostrar informacion: OCX con manejo de pantalla - ¿Cómo agregar un control Web Explorer a nuestra aplicación?


QPM (QAC Based Project Manager) Version 05.05.0016

Compilación Incremental con las tres versiones de librerías mas populares de la familia MiniGui: HMG, HMG Extended y OOHG.

Lista de usuarios    Donar vía PayPal    Sitio del proyecto


Powered by QPM  

Previous topic  First topic  Next topic