 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Kyo Invitado
|
Publicado: Jue 19 Jun, 2003 5:05 pm Asunto: Como puedo controlar el evento cerrar del word.(OLE OBJECTS) |
|
|
Quiero capturar el evento cerrar del word desde mi programa
gracias. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 23 Jun, 2003 2:43 pm Asunto: |
|
|
Hola:
En este momento no puedo explicarte muchos detalles, pero si sigues las instrucciones debería funcionarte. Ya si tienes alguna duda más concreta sobre esto me avisas e intentare explicarte:
Para abreviar el ejemplo he puesto la implementación de los métodos en la misma declaración de la clase. Luego si te sirve ya te lo organizas tu como mejor te venga.
- Lo primero es que añadas en la cabecera del Form la clase siguiente:
| Código: | #include <utilcls.h>
#include <atl/atlbase.h>
IID IID_ApplicationEvents =
{0x000209F7, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
class TWordEventsSink :
public TEventDispatcher<TWordEventsSink, &IID_ApplicationEvents >
{
protected:
HRESULT InvokeEvent(DISPID id, TVariant* params)
{
switch (id)
{
case 2 : // ONQUIT
// ... AQUI PODEMOS AÑADIR NUESTRO CODIGO ...
// WORD NO SE CERRARA HASTA QUE TERMINE DE
// EJECUTARSE LO QUE PONGAMOS AQUI
Application->MainForm->Caption = "Se ha cerrado Word";
break;
}
return S_OK;
}
CComPtr<IUnknown> m_pSender;
public:
TWordEventsSink() :
m_pSender(0)
{
}
virtual ~TWordEventsSink()
{
Disconnect();
}
void Connect(IUnknown* pSender)
{
if (pSender != m_pSender)
m_pSender = pSender;
if (m_pSender)
ConnectEvents(m_pSender);
}
void Disconnect(void)
{
if (m_pSender)
{
DisconnectEvents(m_pSender);
m_pSender = 0;
}
}
} wordEvents; |
- Y luego por ejemplo en un botón el siguiente código para probar la clase anterior:
| Código: | // Abrimos una instancia de Word y la hacemos visible
Variant word = CreateOleObject("Word.Application");
word.OlePropertySet("Visible", true);
// Aquí conectamos nuestra clase que
// recibirá el evento OnQuit de Word
wordEvents.Connect(word); |
El ejemplo lo que hace es que al pulsar el botón abres una instancia de Word y cuando la cierres cambiara el "Caption" de tu Form indicando que Word se acaba de cerrar.
Para capturar otros eventos de Word solo habría que añadir mas condiciones al switch.
Espero que te sirva.
Saludos:
_Leo |
|
| Volver arriba |
|
 |
Kyo Invitado
|
Publicado: Mar 24 Jun, 2003 7:18 pm Asunto: Gracias |
|
|
Muchas gracias _Leo,
Lo que realmente quiero conseguir, es usar el preview del word en mi aplicacion directamente, es decir, evitar que se vea la ventana del documento. Y tambien quiero poder cerrar el preview sin que pida confirmacion de guardar cambios |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 25 Jun, 2003 3:00 pm Asunto: |
|
|
Hola Kyo:
¿ Y que has conseguido hasta el momento ?
Si lo que quieres es usar Word como substituto del QuickReport me parece tomarse demasiado trabajo y muy complicado tener control sobre el al 100%, pero bueno, aquí estamos para ayudarte en lo que se pueda.
Si no te gusta el QuickReport, o por cualquier razón no encuentras comodo el diseño por bandas o lo encuentras limitado, por que no dibujar directamente tus paginas en el Canvas de TPrinter ? o incluso si quieres no tener que currarte la previsualización podrías usar el Canvas de TQRPrinter, con lo que usarías el QuickReport solo para tener la previsualización (no tendrías que tocarlo en tiempo de diseño para nada), pero trabajarías igual a como lo haces con TPrinter...
Saludos:
_Leo |
|
| Volver arriba |
|
 |
Kyo Invitado
|
Publicado: Mie 25 Jun, 2003 11:01 pm Asunto: |
|
|
Hola _leo, y gracias de nuevo por tomarte las molestias.
Has dado en el clavo, no me gusta mucho el quickreport (aunque tengo casi terminado una aplicación para crear informes en qr). Lo que busco es una manera sencilla de imprimir facturas, pero con respecto al uso de la banda detalle o me falta saber algo o es completamente de tamaño dinámico (igual lo tengo delante de mis narices y no me entero...).
En fin, no se si crearme una clase en base a TPrinter... buscaba la forma de que los usuarios pudieran editar los informes.
¿Por qué decidirías tú?
Muchas gracias de nuevo |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|