Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   imprimir varios archivos de word (https://www.clubdelphi.com/foros/showthread.php?t=74879)

gabyzava 15-07-2011 00:23:43

imprimir varios archivos de word
 
Hola a todos

Necesito saber como imprimir varios archivos de word

Uso lo siguiente:
Código Delphi [-]
 
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:

Cita:

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:
Código Delphi [-]
...
  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.

Cita:

si la instrucción es una vez si funciona, pero varias veces ya no hace nada.
Por otra parte el código
Código Delphi [-]
...
 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

imprimir con ShellExecute
 
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:
Código Delphi [-]
    
    s:= 'C:\apuntes1.doc';
     ShellExecute(Handle, 'print', @s[1], nil, nil, 0);
pero si esta asi ya no hace nada
Código Delphi [-]
 
   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:
Código Delphi [-]
...
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

Si funciona
 
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

Compartir
 
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

Cita:

Empezado por ecfisa (Mensaje 406460)
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:
Código Delphi [-]
...
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

Cita:

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.

Código Delphi [-]
...
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
Código Delphi [-]
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 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

Cita:

Empezado por PepeLolo (Mensaje 419363)
Te pongo enlace 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!!


La franja horaria es GMT +2. Ahora son las 05:05:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi