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 invoco Word desde mi aplicación?

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Como invoco Word desde mi aplicación? Responder citando

Hola:

Necesito llamar a Microsft Word desde mi aplicacion, pero al cargarlo debe abrir un documento existente..tengo un boton que debe cargar un documento de Word pero no tengo idea como hacerlo, alguien poodria ayudarme por favor??

De antmano mil gracias por su ayuda.

Saludos.
Volver arriba
Mensaje    Asunto: Responder citando

Cool Hola. Busca en el foro ShellExecute. Aquí dieron una respuesta para archivos pdf (para doc, igual):

https://cppbuilder.es/viewtopic.php?t=6909&highlight=shellexecute
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

ShellExecute(NULL,"open","winword.exe",0,0,SW_SHOWDEFAULT);
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Graicas Responder citando

Hola:

Gracias por respoder.

De verdad mil gracias.

Bye.
Volver arriba
Mensaje    Asunto: Responder citando

no es nada, para eso estamos Wink
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Mira buscando un poco, encontre los siguiente, en los examples de builder

en el directorio
C:\ARCHIVOS DE PROGRAMA\BORLAND\CBUILDER6\EXMAPLES\DOC\OLEWORD1\MAIN.CPP

que dentro de un boton trae el siguiente codigo para abrir word, y de paso insertarle una caden de texto.. seria cuestion de buscarle para ingresar el documento.. aun que tambien biene, el OLEWORD2, (otro directorio)
Código:

Variant V;

     V = CreateOleObject("Word.Basic");
     V.Exec(Procedure("AppShow"));
     V.Exec(Procedure("FileNew") << "Normal");
     V.Exec(Procedure("Insert") << "Dese mi Apliación");

ponlo en un boton, asi mismo esta el siguiente codigo.. que es el de OleWord2

que habre un documento, le ponte texto, y ademas graba el archivo, con el nombre de CBUILDER.DOCm y le asinga la contraseña si vas con [F4], desde que pones el boton, te vas a dar cuenta como trabaja, te pongo todo el codigo por si no encuetras el archivo...

Código:

//----------------------------------------------------------------------------
//Borland C++Builder
//Copyright (c) 1987, 1998-2002 Borland International Inc. All Rights Reserved.
//----------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include <comobj.hpp>
#include <memory>     //for STL auto_ptr
#include <stdio.h>
#include <dir.h>
#include <io.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <string>
#include "main.h"
#include "notify.h"

//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TOleWordForm *OleWordForm;
char *current_directory(char *path);
//---------------------------------------------------------------------------
__fastcall TOleWordForm::TOleWordForm(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------
#pragma warn -stv
void __fastcall TOleWordForm::TalkToWordClick(TObject *Sender)
{
  static HANDLE shFileMap = NULL;

  //Get the current directory and build the filename string
  char curdir[MAXPATH];
  current_directory(curdir);
  AnsiString strFullFileName(curdir);
  strFullFileName = strFullFileName + "\\CBUILDER.DOC";

  //Create the message window and proceed with automating Word
  std::auto_ptr<TNotifyForm> pfrm(new TNotifyForm(this));
  pfrm->Label1->Caption = "Starting Microsoft Word...";
  pfrm->Update();

  try{

    //check that this automation routine is not already executing.  A single
    //instance of Word seems not to like it.
    shFileMap = CreateFileMapping((HANDLE)0xffffffff,
                                  NULL,
                                  PAGE_READWRITE,
                                  0,
                                  4,
                                  "OLEWord2SharedData");
    if (shFileMap != NULL && GetLastError() == ERROR_ALREADY_EXISTS){
    throw Exception( "This automation procedure seems be running already. Aborting Automation.");
    }

    V = CreateOleObject("Word.Basic");

    pfrm->Label1->Caption = "Opening a new file..." ;
    pfrm->Update();
    V.Exec(Procedure("FileNew") << "Normal");

    pfrm->Label1->Caption = "Inserting words..." ;
    pfrm->Update();
    V.Exec(Procedure("Insert") << "Borland welcomes you to the wonderful ");
    V.Exec(Procedure("Insert") << "world of Borland C++Builder.\nWe're so ");
    V.Exec(Procedure("Insert") << "very glad you could join us!\n");

    pfrm->Label1->Caption = "Saving CBUILDER.DOC, password=cbuilder...";
    pfrm->Label3->Caption = "If MSWord starts flashing, "
                            "please right-click on the caption bar.";
    pfrm->Update();
    V.Exec(Procedure("FileSaveAs") << strFullFileName << NULL << NULL << "cbuilder");

    pfrm->Label1->Caption = "Closing the file CBUILDER.DOC. . ." ;
    pfrm->Update();
    V.Exec(Procedure("FileClose") << 1);

    pfrm->Label1->Caption = "Operation complete!";
    pfrm->Update();
  }


  catch(EOleException& e){
    char buf[256];
    pfrm->Label1->Caption = "An EOleException reference has been encountered...";
    sprintf(buf, "Result: %s.\n\n%s.",
            e.Message,
            "The password for this file is \"cbuilder\".\n"
            "The new file will not be saved.");
    V.Exec(Procedure("AppHide"));
    ShowMessage(buf);
    V.Exec(Procedure("AppShow"));
  }
  catch(EOleSysError& e){
    char buf[256];
    sprintf(buf, "Result: %s.\n\n%s", e.Message,
            "This example program requires Microsoft Word.\n");
             ShowMessage(buf);
  }

  catch(Exception& e){
    pfrm->Label1->Caption = "Word seems to have created CBUILDER.DOC already...";
    pfrm->Update();
    V.Exec(Procedure("AppHide"));
    ShowMessage(e.Message);
    V.Exec(Procedure("AppShow"));
  }

  //If none of the above exceptions, catch it so that we can close the handle
  catch(...){}
  CloseHandle(shFileMap);
}
#pragma warn .stv
//---------------------------------------------------------------------

#pragma warn -sig
char *current_directory(char *path)
{
  strcpy(path, "X:\\");      /* fill string with form of response: X:\ */
  path[0] = 'A' + getdisk();    /* replace X with current drive letter */
  getcurdir(0, path+3);  /* fill rest of string with current directory */
  return(path);
}
#pragma warn .sig

_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Creo que lo que buscas es esto, para cargar word abriendo un archivo existente:

AnsiString sDoc = "c:\midoc.doc";

ShellExecute(NULL,"open","winword.exe",sDoc.c_str(),0,SW_SHOWDEFAULT);
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Codial saludo Responder citando

Hola, gracias por su ayuda, he estado probando el cxodigo y tratando de modificarlo para lograr que Word se ejecute como parte de mi aplicacion de manera modal, pero nooooooooooooooooo, eso esta imposible no lo he logrado...he estado intentando con las propiedades del llamado a ShellExecute pero nop, no me funciona....me pregunto si hacerlo es posible usando el BCB 5 o 6?


Saludos,

De nuevo gracias.

Bye.
Volver arriba
Mensaje    Asunto: Responder citando

de forma modal?

no lo creo, lo q si podrias hacer, no se bien como es si detectas q Word esta activo, deshabilitas tu aplicacion.

El codigo podria ir en un Timer por ejemplo

HWND hWnd = FindWindow( ... , ... );

if (hWnd != NULL)
ShowMessage("word activo!");
else
ShowMessage("no activo");


Los parametros de FindWindow, tendrias q analizarlo, el primero es la clase de la ventana principal y el segundo el caption. Cualquier puede ser NULL
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
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.