Usando controles ActiveX u OCX

Me ha sorprendido gratamente que después de mi primer artículo en Xailer.info me hayan enviado varios mensajes privados agradeciendo el código fuente y el manual, sobre todo por parte de usuarios que vienen directamente de Clipper y necesitan leer código antes de empezar a tomar conciencia de trabajar con Programación Orientada a Objetos.

Es por eso que en esa línea más práctica que teórica voy a escribir una breve serie de pequeños artículos para ilustrar con ejemplos, código y manual o explicación detallada, algunos de los agradables descubrimientos que he ido haciendo en estos últimos meses de uso de Xailer.

Como algunos de ellos tienen que ver con el manejo de controles ActiveX empiezo con ellos, concretamente vamos a ver.

  • Crear un navegador Web en un formulario de Xailer.
  • Uso de documentos PDF en un formulario de Xailer.
  • Uso de Google Maps en un formulario de Xailer.
  • Graficación en un formulario de Xailer con controles de terceros.

¿ Qué es un control ActiveX u OCX ?

Son controles ajenos a Xailer, que no crean sus propias ventanas, sino que los tenemos que colocar sobre algún formulario de nuestra aplicación Xailer.

Hay muchos de ellos presentes en el propio Windows, como por ejemplo el control «navegador web», que genera un navegador Internet Explorer dentro de un form de nuestra aplicación.

Hay muchos otros gratuitos que podemos instalar fácilmente como el control Adobe PDF reader, que se instala cuando instalamos el programa gratuito Acrobat Reader que está presente en la mayoría de los PCs o se descarga directamente de Internet.

Hay miles de ellos de pago como uno con el que estuve trasteando el otro día para grabar CDs o DVDs directamente desde nuestras aplicaciones.

Todos ellos pueden ser directamente usados desde Xailer ya que contiene la tecnología que lo posibilita y de esta manera abre un gran abanico de posibilidades en nuestras aplicaciones, por ejemplo quién iba a pensar que poniendo un botón al lado de la dirección de un form de clientes y con 6 líneas de código podríamos localizarle en un mapa global de Google e incluso generar la ruta detallada desde nuestras instalaciones hasta el cliente, calcular los kilómetros, etc.

Primer ejemplo

Este primer sencillo ejemplo (que también está incluido en los samples de Xailer TestOcx) es un simple navegador Web. Descargar Proyecto
Para ello he creado un form que consta de tres botones, un control edit y un Bevel o contenedor vacío que va a ser después el contenedor del control “Activex Microsoft Web Browser”.

Para ello tras crear el form con sus controles añado el OCX desde el menú «Componentes» con la opción “Importar ActiveX”. Veremos que Xailer nos muestra una gran cantidad de controles ActiveX, son los que ya están instalados en nuestro PC bien por Windows o bien por otros programas instalados después y este es el primer problema de los ActiveX, podemos tenerlos instalados en nuestro PC pero no en el PC del cliente y por lo tanto el programa funciona en nuestro PC pero no en el PC del cliente y habría que instalarlos aparte, esto lo veremos en un ejemplo que describiré más adelante en un próximo artículo.

El control “Activex Microsoft Web Browser” está presente en todos los PC ya que viene de serie con Windows y sobre él podremos hacer muchas cosas, todas las que podemos hacer en un navegador Web corriente.

Al seleccionar este componente y pulsar sobre el botón «Crear clase» Xailer nos genera una nueva clase CLASS TWebBrowser FROM TOcx creando para ello un PRG y un CH que son después guardados en las carpetas Source e Include respectivamente de nuestra aplicación.

Ahora ya tenemos control sobre este componente y podremos hacer lo que sus métodos, eventos y propiedades nos permitan, para ello basta con echar un vistazo a los mismos en el PRG generado automáticamente, aunque no hace falta que nos fijemos demasiado en ellos de momento.

Mejor veamos el fuente. En la cabecera del Form1.Prg he añadido de forma manual el

 COMPONENT oOcx

De esta manera podré hacer uso de él en todos los métodos de Tform1.

En el método OnCreate del Bevel he asignado el Ocx al Bevel

METHOD Bevel1Create( oSender ) CLASS TForm1

   ::oEdit1:cText:="www.xailer.com"

   WITH OBJECT ::oOcx := TWebBrowser():New( ::oBevel1 )
      :nAlign := alCLIENT
      :Create()
   END

   ::oOcx:Navigate( ::oEdit1:cText )

RETURN Nil

Hay que destacar que obligo al OCX a alinearse al área cliente del Bevel para que lo ocupe en su totalidad :nAlign := alCLIENT antes de crearlo :Create() ya que si no, no se vería mas que un puntito que sería el control oOcx y a continuación le mando navegar con el método :Navigate() que viene incluido en el control WebExplorer.

En este punto la lástima es que no veamos en el diseño desde el IDE directamente la página web que sélo se verá en ejecución, pero esto será algo que el equipo Xailer mejorará para la versión 2.0 de Xailer prevista para el 2008.

Basta con este código para que pulsemos F9 con lo cual compila, linka y ejecuta el programa y veremos el navegador en marcha.

Imagen de Web Browser

Podemos navegar, teclear una dirección en el Edit y pulsar Ir a, ir hacia Atrás o Adelante (mientras se pueda).

Como se puede observar en el código de los eventos OnClick de los botones simplemente llamamos a métodos del objeto oOcx:


::oOcx:Navigate( ::oEdit1:cText )

::oOcx:GoBack()

::oOcx:GoForward()

ya que la clase creada automáticamente por Xailer con la opción “Importar ActiveX” ya contiene estos métodos y nosotros no tenemos que programar nada en ellos.

Un único detalle en cuanto al código es el uso de TRY / CATCH, por ejemplo:

TRY
   ::oOcx:GoBack()
CATCH
   MsgBeep()
END

TRY intentará hacer un ::Goback() pero en caso de no poder hacerlo y dar error no se muestra el error sino que CATCH lo captura y lo convierte en un pitido, elegante y sencillo.

Este ejemplo es muy sencillo y en la carpeta Samples de Xailer hay uno mas completo llamado TestOCX que podéis consultar para mejorarlo.

Los siguientes artículos profundizarán un poco más sobre este asunto.

Salu2 y gracias.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *