look and feel de word embebido en otra aplicación.

13/07/2009 - 10:19 por jvillanu | Informe spam
Nosotros adaptamos -- mediante el uso de OLE -- el "look&feel" de Word
cuando visualizamos documentos dentro de nuestra aplicación a fin de impedir
al usuario cualquier operación sobre dicho documento (ocultamos todas las
barras de herramientas y la barra de menús y luego ocultamos la barra de
título de la ventana para impedir que la mueva).

Con la versión 2007 de Office, algunos comandos OLE y/o del API de Windows
parecen no surtir efecto y no nos es posible quitar las barras de
herramientas, menús desplegables, barra de título de Word, ... de manera que
el usuario puede acceder a todas las funcionalidades e incluso mover la
ventana de Word dentro de la aplicación. El aspecto del intento de
integración conseguido para Word 2007 (el documento Word contenido en este
ejemplo es distinto al anterior).

Según hemos podido indagar en la web, el problema parece haber surgido al
incluirse en esta nueva versión los conceptos de "Barra de Herramientas de
Acceso Rápido" (la pequeñita de arriba a la izquierda sobre el título de
Word), "Botón de Office" (el botón grande de arriba a la izquierda que
despliega menús) y la "Cinta de Opciones" (los menús desplegables que
muestran más botones). Hemos intentado buscar en la web como solventar esto
aspecto usual de versiones anteriores -- pero hasta ahora no hemos conseguido
nada.

A continuación indico en pseudocódigo los pasos que seguimos para integrar
Word en la aplicación, incluyendo las llamadas al API de Windows:

- Creamos el objeto OLE de automatización OLE para "Word.Application".
- Mediante la propiedad "Caption" del objeto OLE recién creado, cambiamos
el título de la ventana asociada a dicho objeto OLE.
- Usando la función FindWindowExA de la "User32.dll" (API de Windows)
localizamos el handle de la ventana recién abierta.
- Usando la función SetParent de la "User32.dll" (API de Windows) asignamos
como padre de la ventana de Word a la ventana principal de nuestro aplicativo
financiero.
- Usando la función SetForegroundWindow de la "User32.dll" (API de Windows)
ponemos en primer plano la ventana principal de nuestro aplicativo financiero.
- Mediante la asignación de distintas propiedades del objeto OLE creado
para Word:
- Ocultamos Word.
- Impedimos que Word se refresque para que la ejecución de todo lo demás
vaya más rápido (así no repagina ni nada mientras jugamos con el documento).
- Abrimos el documento a mostrar.
- Activamos dicho documento dentro de Word.
- Usando la función GetWindowLongA de la "User32.dll" (API de Windows)
leemos las propiedades de la ventana de Word.
- Usando la función SetWindowLongA de la "User32.dll" (API de Windows)
quitamos de las propiedades de la ventana de Word los botones de minimizar,
maximizar, cerrar, el menú de la esquina superior izquierda (que permite
también todas estas opciones) y la barra de título de la ventana de Word.
- Mediante la asignación de distintas propiedades del objeto OLE creado
para Word:
- Protegemos el documento abierto en Word.
- Cogemos la subventana activa de Word y le aplicamos la vista en modo
"Vista para Impresión".
- Maximizamos dicha subventana dentro del propio Word (por si tenían vista
mosaico o similar).
- Ocultamos las reglas (propiedad "DisplayRulers").
- Para cada barra de herramientas, ponemos su propiedad "Enabled" a 0,
para que no se muestren (los menús desplegables son también una de estas
barras).
- Permitimos que Word se refresque (propiedad "ScreenUpdating").
- Quitamos la barra de scroll horizontal.
- Ponemos el estado de la ventana activa de la aplicación ("WindowState")
a wdWindowStateNormal, porque si está maximizada, no deja redimensionarla.
- Cambiamos el tamaño de la ventana de Word a lo que necesita nuestro
aplicativo financiero.
- Situamos la ventana de Word en la posición que le interesa a nuestro
aplicativo financiero.
- Hacemos visible Word.
- Quitamos la StatusBar de Word.
- Ponemos el zoom de Word a wdPageFitBestFit para que se muestre el
documento a todo lo ancho en el hueco permitido.
- Mostramos la ventana de nuestro aplicativo que contiene a la de Word.
- Usando la función SetWindowPos de la "User32.dll" (API de Windows)
ponemos la ventana de Word arriba según el z-orden sin moverla ni cambiar su
tamaño.
- Usando la función RedrawWindow de la "User32.dll" (API de Windows)
forzamos el repintado de la ventana de Word.que evita que parte de él quede a
veces como borrado hasta que el usuario (usamos los flags RDW_INVALIDATE +
RDW_INTERNALPAINT + RDW_ALLCHILDREN + RDW_UPDATENOW + RDW_ERASENOW)
 

Leer las respuestas

#1 Monica May
14/07/2009 - 00:19 | Informe spam
Hola,


No se puede configurar Word como en versiones anteriores... ahora en Office
2007 el tema de las barras de herramientas ha variado para ello mirate los
siguientes articulos >>

Como Personalizar la Cinta de Opciones (Ribbon) en Office 2007 de nuestra
companera Marta PM :-) !
http://www.fermu.com/content/view/512/2/lang,es/

Mis Macros Favoritas de nuestro companero Hector Miguel Orozco Diaz :-) !
http://www.teladearana.es/seccion/excel/47-h6.html

Iconos para nuestro Office 2007
Cinta Ribbon (cinta de opciones)
http://www.teladearana.es/todo-info...-word.html


Comentanos...!

Saludos
Monica



Nosotros adaptamos -- mediante el uso de OLE -- el "look&feel" de Word
cuando visualizamos documentos dentro de nuestra aplicación a fin de
impedir
al usuario cualquier operación sobre dicho documento (ocultamos todas las
barras de herramientas y la barra de menàºs y luego ocultamos la barra de
tà­tulo de la ventana para impedir que la mueva).

Con la versión 2007 de Office, algunos comandos OLE y/o del API de Windows
parecen no surtir efecto y no nos es posible quitar las barras de
herramientas, menàºs desplegables, barra de tà­tulo de Word, ... de manera
que
el usuario puede acceder a todas las funcionalidades e incluso mover la
ventana de Word dentro de la aplicación. El aspecto del intento de
integración conseguido para Word 2007 (el documento Word contenido en este
ejemplo es distinto al anterior).

Segàºn hemos podido indagar en la web, el problema parece haber surgido al
incluirse en esta nueva versión los conceptos de "Barra de Herramientas de
Acceso Rà¡pido" (la pequeà±ita de arriba a la izquierda sobre el tà­tulo de
Word), "Botón de Office" (el botón grande de arriba a la izquierda que
despliega menàºs) y la "Cinta de Opciones" (los menàºs desplegables que
muestran mà¡s botones). Hemos intentado buscar en la web como solventar esto
aspecto usual de versiones anteriores -- pero hasta ahora no hemos
conseguido
nada.

A continuación indico en pseudocódigo los pasos que seguimos para
integrar
Word en la aplicación, incluyendo las llamadas al API de Windows:

- Creamos el objeto OLE de automatización OLE para "Word.Application".
- Mediante la propiedad "Caption" del objeto OLE recién creado, cambiamos
el tà­tulo de la ventana asociada a dicho objeto OLE.
- Usando la función FindWindowExA de la "User32.dll" (API de Windows)
localizamos el handle de la ventana recién abierta.
- Usando la función SetParent de la "User32.dll" (API de Windows)
asignamos
como padre de la ventana de Word a la ventana principal de nuestro
aplicativo
financiero.
- Usando la función SetForegroundWindow de la "User32.dll" (API de
Windows)
ponemos en primer plano la ventana principal de nuestro aplicativo
financiero.
- Mediante la asignación de distintas propiedades del objeto OLE creado
para Word:
- Ocultamos Word.
- Impedimos que Word se refresque para que la ejecución de todo lo demà¡s
vaya mà¡s rà¡pido (asà­ no repagina ni nada mientras jugamos con el
documento).
- Abrimos el documento a mostrar.
- Activamos dicho documento dentro de Word.
- Usando la función GetWindowLongA de la "User32.dll" (API de Windows)
leemos las propiedades de la ventana de Word.
- Usando la función SetWindowLongA de la "User32.dll" (API de Windows)
quitamos de las propiedades de la ventana de Word los botones de minimizar,
maximizar, cerrar, el menຠde la esquina superior izquierda (que permite
también todas estas opciones) y la barra de tà­tulo de la ventana de Word.
- Mediante la asignación de distintas propiedades del objeto OLE creado
para Word:
- Protegemos el documento abierto en Word.
- Cogemos la subventana activa de Word y le aplicamos la vista en modo
"Vista para Impresión".
- Maximizamos dicha subventana dentro del propio Word (por si tenà­an
vista
mosaico o similar).
- Ocultamos las reglas (propiedad "DisplayRulers").
- Para cada barra de herramientas, ponemos su propiedad "Enabled" a 0,
para que no se muestren (los menàºs desplegables son también una de estas
barras).
- Permitimos que Word se refresque (propiedad "ScreenUpdating").
- Quitamos la barra de scroll horizontal.
- Ponemos el estado de la ventana activa de la aplicación ("WindowState")
a wdWindowStateNormal, porque si està¡ maximizada, no deja redimensionarla.
- Cambiamos el tamaà±o de la ventana de Word a lo que necesita nuestro
aplicativo financiero.
- Situamos la ventana de Word en la posición que le interesa a nuestro
aplicativo financiero.
- Hacemos visible Word.
- Quitamos la StatusBar de Word.
- Ponemos el zoom de Word a wdPageFitBestFit para que se muestre el
documento a todo lo ancho en el hueco permitido.
- Mostramos la ventana de nuestro aplicativo que contiene a la de Word.
- Usando la función SetWindowPos de la "User32.dll" (API de Windows)
ponemos la ventana de Word arriba segàºn el z-orden sin moverla ni cambiar
su
tamaà±o.
- Usando la función RedrawWindow de la "User32.dll" (API de Windows)
forzamos el repintado de la ventana de Word.que evita que parte de él quede
a
veces como borrado hasta que el usuario (usamos los flags RDW_INVALIDATE +
RDW_INTERNALPAINT + RDW_ALLCHILDREN + RDW_UPDATENOW + RDW_ERASENOW)

Preguntas similares