ActiveX describe controles que utilizan COM y OLE. OLE (Object Linking and Embedding) y COM (Component Object Model) suponen las formas de comunicar con objetos Windows desde tus aplicaciones Xojo.
Puedes utilizar las clases OLEObject, OLEContainer, OLEParameter y OLEException para acceder a estas capacidades de Windows.
OLEObject
Puedes utilizar OLEObject para enviar mensajes a otras aplicaciones Windows que soporten OLE, como puede ser por ejemplo el caso de Internet Explorer. Utiliza el método Value para obtener y también definir los valores del objeto OLE. Utiliza el método Invoke para realizar las llamadas a los métodos (con o sin argumentos) sobre un objeto OLE.
Este código crea una conexión a Internet Explorer y le indica que muestre la Wikipedia:
Dim obj As OLEObject Dim v As Variant Dim params(1) As Variant obj = OLEObject("InternetExplorer.Application", True) obj.Value("Visible") = True params(1) = "http://www.wikipedia.org" v = obj.Invoke("Navigate", params) Exception e As OLEException MsgBox(e.message)
OLEContainer
Se utiliza OLEContainer para embeber (empotrar) controles ActiveX en tus aplicaciones Xojo.
Para usar un OLEContainer, has de arrastrarlo desde la Librería sobre la Ventana de tu proyecto Xojo. Indica en la propiedad ProgramID del Inspector el ID de programa para el control.
Puedes acceder a las propiedades y métodos del ActiveX utilizando la propiedad Content, la cual devolverá un OLEObject sobre el que podrás usar los métodos Value e Invoke.
Este código en un Botón, muestra un PDF en un Adobe Reader ActiveX OLEContainer que se ha añadido a la ventana:
PDFContainer.Content.Value("Src") = "C:\Document.pdf"
En función de la versión de Adobe Reader, es posible que debas de hacer un clic sobre el container antes de que se muestre el PDF.
Para imprimir el PDF en el OLEContainer, puedes llamar al método “printWithDialog” del control Adobe Reader ActiveX:
PDFContainer.Content.Invoke("printWithDialog"
Usar Insert ActiveX Component
También puedes añadir directamente controles ActiveX y objetos automatizables/OLE seleccionando Insert > ActiveX Componente desde el menú. Esta acción muestra una ventana con dos pestañas: Controles y References. La pestaña Controls muestra todos los controles ActiveX que puedes añadir a la ventana. La pestaña References muestra los objetos COM automatizables que no son controles, como pueda ser el caso de iTunes Library, Microsoft Word, etc.
Cuando seleccionas un elemento y pulsas sobre OK, Xojo añadirá un módulo al proyecto en el que se incluiran las clases del componente, listo para usar. Consulta la documentación del componente para entender cómo has de utilizar sus clases, métodos y propiedades.
Hola, Javier:
soy muy novato en programación. He estado probando el ejemplo de arriba y en la línea en un evento open de windows1:
obj = OLEObject(“InternetExplorer.Application”, true)
me da el error: Este método requiere menos parámetros que los pasados. En realidad lo que pretendo es abrir Chrome y navegar por éldesdelaventanabase,pero imagino que si no empiezo por entender lo más básico, menos voy a entenderlo de los contenedores OLE.
Un saludo y muchas gracias.
Hola Pablo,
¿Quizá sería suficiente utilizar un HTMLViewer en tu app para lo que quieres hacer? En este caso podrías crear tu propio navegador utilizando el renderer WebKit (Chromium): navegar entre páginas y… con un par de controles adicionales y poco código “volver a páginas anteriores” o “ir a página siguiente” o incluso añadir historial… entre otras capacidades.
De acuerdo. Muchas gracias, Javier. Probaré lo que me dices. Tengo una aplicación funcional que funciona con htmlviewer, aunque muy ortopédica, pues la he ido cocinando con los ejemplos de los manuales…
Lo que ocurre es que intuyo que el plug-in de IE que usa el htmlviewer es del año de María Castaña y, por ejemplo, me da errores con las diéresis en los enlaces. De ahí que me plantease si era posible utilizar otro navegador.
Si en 30 días no he conseguido pulir el programa hasta el punto que pretendo, te explico lo que quiero hacer y te pediré 1 o 2 horas de asesoramiento de pago, y si son más horas pues ya se verá.