 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Amateur Invitado
|
Publicado: Sab 17 Abr, 2004 12:26 am Asunto: Como invoco Word desde mi aplicación? |
|
|
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 |
|
 |
lycopersium Lt


Registrado: 12 Oct 2002Mensajes: 90Ubicación: Roquetas de Mar - Almería
|
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Sab 17 Abr, 2004 4:34 pm Asunto: |
|
|
| ShellExecute(NULL,"open","winword.exe",0,0,SW_SHOWDEFAULT); |
|
| Volver arriba |
|
 |
Amateur Invitado
|
Publicado: Sab 17 Abr, 2004 9:53 pm Asunto: Graicas |
|
|
Hola:
Gracias por respoder.
De verdad mil gracias.
Bye. |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Sab 17 Abr, 2004 10:17 pm Asunto: |
|
|
no es nada, para eso estamos  |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 19 Abr, 2004 4:55 am Asunto: |
|
|
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
|
_________________
 |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Lun 19 Abr, 2004 9:35 am Asunto: |
|
|
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 |
|
 |
Amateur Invitado
|
Publicado: Mie 21 Abr, 2004 9:23 pm Asunto: Codial saludo |
|
|
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 |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Mie 21 Abr, 2004 9:37 pm Asunto: |
|
|
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 |
|
 |
|
|
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.
|