PDA

Ver la Versión Completa : imprimir varios archivos de word


gabyzava
15-07-2011, 00:23:43
Hola a todos

Necesito saber como imprimir varios archivos de word

Uso lo siguiente:

s:=c:/apuntes.doc;
ShellExecute(form1.Handle,'open',@s[1],nil,nil,0);

si la instrucción es una vez si funciona, pero varias veces ya no
hace nada.

¿Que se puede hacer para imprimir varios?

o porque no funciona esta instrucción?


Mil gracias

ecfisa
15-07-2011, 01:02:22
Hola.

A ver... no entiendo algunas cosas:


Necesito saber como imprimir varios archivos de word

Las líneas que adjuntas, te abriran el archivo especificado en la variable 's' con el editor asociado pero no lo imprimirán en forma directa.

Si lo que buscas es imprimir te pongo un ejemplo de como sería:

...
s:= 'C:\ARCHIVO.TXT';
ShellExecute(Handle, 'print', @s[1], nil, nil, 0);
...

No sé si funciona con Word, en principio por que uso LibreOffice. Tendrías que revisar si hay que pasarle algún argumento para que lo haga.


si la instrucción es una vez si funciona, pero varias veces ya no hace nada.


Por otra parte el código

...
s:= 'C:\apuntes1.doc';
ShellExecute(Handle, 'open', @s[1], nil, nil, 0);
s:= 'C:\apuntes2.doc';
ShellExecute(Handle, 'open', @s[1], nil, nil, 0);
s:= 'C:\apuntes3.doc';
ShellExecute(Handle, 'open', @s[1], nil, nil, 0);
...

funciona correctamente, te abrirá tres instancias distintas del editor asociado.

Un saludo.

gabyzava
15-07-2011, 01:28:20
Hola otra vez
Mil gracias por contestar

Es cierto que me equivoque al poner open y print,
sin embargo tampoco hace nada con open,

tengo un ciclo en que leo los nombres de varios archivos
y dentro del ciclo no funciona, solo funciona si mando
una instruccion.
por ejemplo:

primero pongo esta y si funciona:

s:= 'C:\apuntes1.doc';
ShellExecute(Handle, 'print', @s[1], nil, nil, 0);

pero si esta asi ya no hace nada

for i:=1 to 100 do
if archivos[i]<>'' then
begin
s:=archivos[i];
ShellExecute(Handle, 'print', @s[1], nil, nil, 0);
end;

¿Porque ShellExecute no funciona dentro de un ciclo?

que puedo hacer?

Gracias a todos

ecfisa
15-07-2011, 02:19:24
Hola gabyzava.

Te pongo el código de esta prueba con un archivo de texto por que sé que podrás reproducirlo sin problemas y quizá te pueda servir. Funciona correctamente abriendo tres instancias del notepad:

...
uses ShellApi;

procedure TForm1.Button1Click(Sender: TObject);
var
v: array[1..3] of PChar;
i: integer;
begin
v[1]:='c:\archivo1.txt';
v[2]:='c:\archivo2.txt';
v[3]:='c:\archivo3.txt';
for i:= 1 to 3 do
ShellExecute(Handle, 'open', v[i], nil, nil, SW_SHOWNORMAL);
end;


Realmente lamento no tener el Word para mirar por que no te está funcionando...

Saludos.

gabyzava
16-07-2011, 00:08:28
hola

Solo para decir gracias, ya encontre el error y el ShellExecute si funciona.


Mil gracias:rolleyes::o:D;):p

Osorio
16-07-2011, 15:40:53
No está demás que compartas lo que encontraste, quizá a otro compañero hoy, mañana o mas tarde le puede servir.

Saludo.

faustofabian
27-07-2011, 16:46:13
Hola gente estoy haciendo lectura de todos, y lo que estoy buscando es imprimir un campo dbmemo en un qreport, tambien se me ha ocurrido escribir en un archivo de word el campo meno, he previsto que el campo tenga 1000 caracteres pues se trata de diagnosticos.... ahora solo estoy viendo que es lo mejor, que imprima directamente en un campo memo, o bien lo saque por word, que el usuario vea el diagnostico completo ahi..... Si alguien me da una mano les agradecere, ... desde ya gracias!!!!

jonydread
22-11-2011, 21:57:24
Hola gabyzava.

Te pongo el código de esta prueba con un archivo de texto por que sé que podrás reproducirlo sin problemas y quizá te pueda servir. Funciona correctamente abriendo tres instancias del notepad:

...
uses ShellApi;

procedure TForm1.Button1Click(Sender: TObject);
var
v: array[1..3] of PChar;
i: integer;
begin
v[1]:='c:\archivo1.txt';
v[2]:='c:\archivo2.txt';
v[3]:='c:\archivo3.txt';
for i:= 1 to 3 do
ShellExecute(Handle, 'open', v[i], nil, nil, SW_SHOWNORMAL);
end;


Realmente lamento no tener el Word para mirar por que no te está funcionando...

Saludos.

Como se puede hacer eso cargando archivos mediante un opendialog o listbox y enviarlos sucesivamente a una aplicación externa??

ecfisa
23-11-2011, 12:39:26
Como se puede hacer eso cargando archivos mediante un opendialog o listbox y enviarlos sucesivamente a una aplicación externa??

Te pongo un ejemplo que carga nombres de archivos de texto (.TXT) en un TComboBox usando un TOpenDialog y ShellExecute los envía para ser abiertos. En este caso, los archivos serán abiertos por la aplicación que esté asociada al tipo de extensión en el S.O.


...
implementation

uses ShellApi;

// Carga los nombres en el combo
procedure TForm1.btnLoadFileNameClick(Sender: TObject);
begin
with OpenDialog1 do
begin
Filter:= 'Archivos de texto | *.TXT';
if Execute then
ComboBox1.Items.Add(FileName);
end;
end;

// Abre los archivos existentes en el combo
procedure TForm1.btnOpenFilesClick(Sender: TObject);
var
i: Integer;
begin
for i:= 0 to ComboBox1.Items.Count - 1 do
ShellExecute(Handle, 'open',PChar(ComboBox1.Items[i]), nil, nil, SW_SHOWNORMAL);
end;
...


Saludos.

jonydread
23-11-2011, 18:16:33
mi Aplicacion externa toma de a uno los archivos por eso consultaba como enviarlos susesivamente estoy tratando de hacerlo con createprocess para cuando termine con uno seguir con otro ay estoy medio colgado porque me sale un error
procedure Tform1.LlamarReg2inf(Hnd: THandle; const App:string; const Origen: string; const Destino: string);
begin
ShellExecute(Hnd,
'OPEN',
PChar(ExtractFileName(App)),
Pchar(Origen+' '+Destino),
PChar(ExtractFilePath(App)),
SW_HIDE);
procedure TForm1.Button2Click(Sender: TObject);
var Origen, Destino : string;
i: Integer;
Process: Cardinal;
begin
Origen := Listbox1.Items[i];
Destino := ChangeFileExt(Origen,'.inf');
LlamarReg2inf(Handle,'REG2INF.EXE',Origen,Destino );
Process := ExecuteProcess('reg2inf.exe');
if Process <> 0 then
WaitForSingleObject(Process, INFINITE);
//finalizado
end;

uso esa funcion que me pasaste en otro post
Gracias

PepeLolo
24-11-2011, 20:14:32
Te pongo enlace (http://angusj.com/pdftkb/#pdftkbuilder) a una aplicación realizada en delphi que fusiona PDF. Descarga el código fuente del mismo, y sigue el proceso al guardar el PDF a generar, este contiene un ejemplo de código que solicitas.

un saludo.

jonydread
25-11-2011, 03:39:50
Te pongo enlace (http://angusj.com/pdftkb/#pdftkbuilder) a una aplicación realizada en delphi que fusiona PDF. Descarga el código fuente del mismo, y sigue el proceso al guardar el PDF a generar, este contiene un ejemplo de código que solicitas.

un saludo.

uff lo vi pero no logre comprender del todo :confused:
gracias!!