Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Como puedo controlar el evento cerrar del word.(OLE OBJECTS)

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Como puedo controlar el evento cerrar del word.(OLE OBJECTS) Responder citando

Quiero capturar el evento cerrar del word desde mi programa

gracias.
Volver arriba
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Gracias Responder citando

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
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.