| Artículos | 01 ABR 1998

Integrar Word en las aplicaciones

Tags: Histórico
Con OLE se obtiene un objeto "Wordbasic"
David R. Vidal.

En más de una ocasión nos habremos encontrado con la necesidad de construir una aplicación que necesita las prestaciones de procesador de textos . Gracias a OLE, la solución puede ser tan sencilla como apoyarse en el procesador de textos Microsoft Word .

Si imaginamos cuál es la aplicación más usada por los usuarios de la informática a lo largo de su historia, es difícil pensar en algo que no sea un procesador de textos . Tal vez en el futuro no sea así y el número uno de la lista sea una navegador Internet, . . . pero esa es otra historia . Si nuestra aplicación va a necesitar el procesador de textos es, seguramente, porque necesita los documentos generados, tal vez para vincularlos de alguna forma a una base de datos .

Tradicionalmente, los programadores disponían de campos memo, palabra heredada del dBase cuyo significado actual es un campo donde se permite guardar texto de forma ilimitada . Bajo esta posibilidad, era posible crear editores de texto más o menos sofisticados, donde poco más se podía hacer que escribir y buscar . Con Windows 95 se puso de moda la utilización del formato RTF ( Rich Text Format ) , viejo conocido de los generadores de ayuda del Windows 3 . 1, que permitía dar un formato al texto escrito: distintos tipos de letra, tamaños de fuentes, cursivas, negrillas, colores, alineados, etc . Ahora bien, ¿ es suficiente un editor RTF ? La pregunta se traduce en sí, para generar escritos, nos parece suficiente el editor WordPad incluido en Windows o sería más conveniente un procesador de textos completo que ofrece justificados, estilos de párrafo, verificación sintáctica, asistentes, plantillas, y un largo etcétera . En este último caso, es preferible utilizar un procesador de textos comercial, a pesar del coste adicional que pueda tener la licencia, que diseñar uno propio . Cualquier procesador de textos que admita OLE Automation ( en seguida veremos de que se trata ) puede estar totalmente integrado en nuestros programas . Por razones obvias, había que elegir alguno para ilustrar este artículo y, basándonos en un simple factor de implantación en el mercado ( no por ser mejor o peor ) hemos elegido Microsoft Word ( a partir de la versión 6 ) .

Con la integración total tenemos ventajas importantes, entre las que citamos las siguientes . Primera, se ejecuta en una ventana de nuestro programa, rodeado de controles de diseño propio . Segunda, podemos enviar y recoger documentos que pueden ser almacenados en archivos o directamente en un campo de una base de datos . Tercera, podemos rellenar ciertos apartados de los documentos con datos suministrados por el programa . Y, cuarta, tenemos un control global del procesador de textos, al que se pueden enviar todo tipo de comandos al igual que se haría manualmente con el ratón .

OLE

Simplificando, podemos definir OLE ( Object Linking and Embedding ) como un modelo de manipulación de objetos basado en COM ( el modelo básico de componente ) que ha ido creciendo hasta englobar casi todo . También podemos definir algunos conceptos asociados . Por ejemplo, OLE Automation es un sistema que permite acceder a objetos fuera de nuestro programa como si fueran propios; OCX son controles a medida basados en OLE ( y por tanto en COM ) y ActiveX es un estándar industrial de componentes que se pueden definir como controles OLE y relacionado con OCX . En nuestro caso, OLE Automation en Word proporciona a otra aplicación ( denominada aplicación recipiente o contenedora ) un objeto que es la unidad básica de información ( que comúnmente tiene que referirse a un documento Word, al tratarse de un procesador de textos, pero pudiera ser cualquier otra cosa ) .

El conjunto de instrucciones o lenguaje que gestiona a Word se denomina WordBasic . Con OLE se obtiene un objeto ?WordBasic? al que enviamos comandos y recibimos respuestas, pero en vez de hacerlo con el antiguo DDE, esta vez utilizaremos funciones similares al lenguaje de programación que estamos usando, con parámetros comunes y valores de retorno igualmente comunes . En términos técnicos, Word es un servidor OLE y puede ser accedido por cualquier aplicación que tenga soporte para esta tecnología .

Crear el acceso

Las normas y métodos que manipulan objetos OLE son comunes; sin embargo, si queremos exponer ejemplos concretos, necesitamos de alguna manera ajustarnos a algún lenguaje de programación, para lo cual vamos a basarnos en Visual Basic 5 de Microsoft y Delphi 3 de Borland . La mayoría de los ejemplos los ilustraremos con código de Delphi, pero también se incluirá alguna referencia a Visual Basic .

Para que Word se encuentre disponible para la aplicación recipiente hemos de definir una variable objeto adecuada . A continuación, utilizaremos alguna función del tipo Crear Objeto OLE que tendrá como parámetro una cadena del tipo Aplicación . Tipo_de_Objeto . En la práctica, bajo Visual Basic definiremos la variable como Object ( Dim WordObj As Object ) y la crearemos con el siguiente código Set WordObj=CreateObject ( ?Word . Basic? ) . Con Delphi, la variable es definida como Variant ( WordObj:Variant ) y su creación se hace mediante WordObj := CreateOleObject ( ?Word . Basic? ) ; .

En la versión 6 de Word, al crear el objeto, si Word no se encontraba activo, se iniciaba una instancia visible . En versiones posteriores ocurre algo parecido, pero la instancia creada es invisible, siendo necesario ordenar expresamente su visualización . En la figura 1 podemos ver un fragmento de código que activa y visualiza Word .

Hemos de observar en las aplicaciones que, tanto Delphi como Visual Basic, van a admitir cualquier sintaxis que le pasemos a los objetos OLE . Así, WordObj . AppShow, no recibe ninguna validación en lo referente al verbo AppShow . En el supuesto de que el servidor OLE no reconozca el comando transmitido, se producirá un error o advertencia en tiempo de ejecución . Además de los objetos WordBasic, cualquier documento de Word puede ser tratado como un objeto . En lo refe-rente al paso de parámetros, no existe mayor problema, pues se trabaja como si lo hiciésemos con métodos o funciones propios variable:=WordObj . comando ( parámetros ) . Existe una peculiaridad en lo referente a las funciones WordBasic que devuelven cadenas y es que pueden finalizar con el signo dólar ( $ ) . Es lo mismo escribir marca=WordObj . [ GetBookmark$ ] ( ? . . . ? ) que esccribir marca=WordObj . GetBookmark ( ? . . . ? ) . Esto es especialmente importante para los programadores de Visual Basic en lo referente a tres funciones de WordBasic: Font$ ( ) , GetSystemInfo$ ( ) y Language$ ( ) , las cuales deben seguir el primer modelo sintáctico con el fin de no ser confundidas con sus homónimas, produciéndose un conflicto .

Documentos

Hasta el momento hemos visto que un objeto WordBasic puede manipular Word casi a su antojo . Aunque dirigir Word puede tener muchas aplicaciones, sobre todo para asistentes y automatizadores de todo tipo, ese no es exactamente el objetivo de este artículo . Ahora, nuestro propósito es conseguir que la aplicación tenga un documento de Word integrado, lo que lograremos definiendo un objeto documento .

Vamos a ver los ejemplos en Delphi . El primer paso es crear un formulario donde arrojamos el correspondiente componente TOleContainer . También se puede hacer con código directamente, cuyos detalles los tenemos en la figura 2 ( atención al nombre MsWordOLEContainer, que es arbitrario ) . Es de destacar que los menús de nuestro formulario y los de Word son mezclados directamente . Asimismo, los paneles y barras de herramientas presentes en el formulario serán reemplazadas por las correspondientes del Word . Esto último puede ser evitado utilizando la propiedad Locke

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información