Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   ¿Por qué ShellExecute imprime pdf en win8 y no en win7? (https://www.clubdelphi.com/foros/showthread.php?t=84625)

Waldo 13-11-2013 20:37:44

¿Por qué ShellExecute imprime pdf en win8 y no en win7?
 
Buen día, hola tengo este código

Código Delphi [-]
ShellExecute(Self.Handle,'print',PChar('archivo.pdf'),NIL,NIL,0);


en la maquina donde se desarrolla ejecuta perfectamente la función, pero cuando llevo la aplicación a otra maquina no hace nada. no entiendo el porque. ojala me podrían ayudar.

Waldo 13-11-2013 21:08:23

Cita:

Empezado por Waldo (Mensaje 469568)
Buen día, hola tengo este código

Código Delphi [-]
ShellExecute(Self.Handle,'print',PChar('archivo.pdf'),NIL,NIL,0);


en la maquina donde se desarrolla ejecuta perfectamente la función, pero cuando llevo la aplicación a otra maquina no hace nada. no entiendo el porque. ojala me podrían ayudar.

También he descubierto que tampoco me ejecuta la apertura del archivo PDF, es como si no funcionara el shellexecute :(

look 13-11-2013 21:19:21

Cita:

Empezado por Waldo (Mensaje 469569)
También he descubierto que tampoco me ejecuta la apertura del archivo PDF, es como si no funcionara el shellexecute :(

¿esta instalado algun lector de pdf en la pc que no funciona?

Waldo 13-11-2013 21:20:53

Cita:

Empezado por look (Mensaje 469570)
¿esta instalado algun lector de pdf en la pc que no funciona?

Si por que ejecuto el archivo desde el explorador y me abre el acrobat sin problemas.

Casimiro Notevi 13-11-2013 21:38:47

Por favor, no olvides poner títulos descriptivos a tus preguntas, "Ayuda" no es ningún título que describa nada.
A ver si damos ejemplo, que eres un usuario "Premium" ;)

Waldo 13-11-2013 21:57:06

Cita:

Empezado por Casimiro Notevi (Mensaje 469572)
Por favor, no olvides poner títulos descriptivos a tus preguntas, "Ayuda" no es ningún título que describa nada.
A ver si damos ejemplo, que eres un usuario "Premium" ;)

Una disculpa tienes razon. Ojala pudiera modificarlo.

Casimiro Notevi 13-11-2013 22:20:55

Cita:

Empezado por Waldo (Mensaje 469573)
Una disculpa tienes razon. Ojala pudiera modificarlo.

;)





.

Waldo 14-11-2013 00:57:55

Código Delphi [-]
ShellExecute(0, nil, 'calc.exe', '', '', SW_SHOWNORMAL);

esa instrucción si me la ejecuta en las otras maquinas pero la de Print no, realmente ya me siento desesperado.

Casimiro Notevi 14-11-2013 01:03:15

Cita:

Empezado por Waldo (Mensaje 469579)
Código Delphi [-]ShellExecute(0, nil, 'calc.exe', '', '', SW_SHOWNORMAL);


esa instrucción si me la ejecuta en las otras maquinas pero la de Print no, realmente ya me siento desesperado.

¿La de Print? :confused::confused::confused:

Waldo 14-11-2013 01:15:01

Cita:

Empezado por Casimiro Notevi (Mensaje 469580)
¿La de Print? :confused::confused::confused:

Amigo me refiero al código inicial que puse es una instrucción para imprimir un archivo pdf, me funciona en windows 8 pero en 7 no.

The_Duke 14-11-2013 01:20:32

Revisa que el servicio de cola de imprecion esta activado y que tenga impresora instalada;)

Waldo 14-11-2013 01:23:33

Cita:

Empezado por The_Duke (Mensaje 469582)
Revisa que el servicio de cola de imprecion esta activado y que tenga impresora instalada;)

Gracias por contestar, Tengo instalado varia impresoras que el mismo sistema utiliza sin problemas, también esta instalado el programa asociado al archivo en este caso el pdf, la cola de impresión esta vacía, y eso sucede en las otras dos maquinas que utilizan windows 7, ya revise permisos del ejecutable, todas las maquinas son a 32 bits, donde si funciona es en windows 8, y es precisamente donde se programa en delphi 7.

Casimiro Notevi 14-11-2013 01:31:41

Cita:

Empezado por Waldo (Mensaje 469581)
Amigo me refiero al código inicial que puse es una instrucción para imprimir un archivo pdf, me funciona en windows 8 pero en 7 no.

Bueno, todo eso lo sabes tú, pero no es lo que has preguntado al inicio.

Waldo 14-11-2013 01:35:00

Cita:

Empezado por Casimiro Notevi (Mensaje 469584)
Bueno, todo eso lo sabes tú, pero no es lo que has preguntado al inicio.

ok lo expongo de nuevo...

Código Delphi [-]
ShellExecute(Self.Handle,'print',PChar('archivo.pdf'),NIL,NIL,0);

esta instrucción me funciona bien en windows 8, y es el equipo donde se programa.

pero cuando el ejecutable es llevado a otra pc no funciona, de hecho no marca error siquiera, simplemente es como si no existiera la instrucción.

pero cuando utilizo
Código Delphi [-]
ShellExecute(0, nil, 'calc.exe', '', '', SW_SHOWNORMAL);

si funciona en todas las maquinas

ecfisa 14-11-2013 02:19:54

Hola Waldo.

De lo leído del hilo quedaría revisar la existencia, el nombre y la ruta del archivo .PDF en los equipos en que no ejecuta la impresión. Si ShellExecute recibe un nombre de archivo inválido no mostrará error de ningún tipo pero no realizará la acción.

Para salir de dudas proba de la siguiente forma:
Código Delphi [-]
procedure PrintPDF(aFileName: TFileName);
begin
  if not FileExists(aFileName) then
    raise Exception.Create('Error en la ruta o el nombre del archivo');
  ShellExecute(Screen.ActiveForm.Handle, 'print', PChar(aFileName), nil ,nil, 0)
end;

// llamada:
...
begin
  PrintPDF('archivo.pdf');
end;


Saludos :)

Waldo 14-11-2013 02:53:43

Cita:

Empezado por ecfisa (Mensaje 469588)
Hola Waldo.

De lo leído del hilo quedaría revisar la existencia, el nombre y la ruta del archivo .PDF en los equipos en que no ejecuta la impresión. Si ShellExecute recibe un nombre de archivo inválido no mostrará error de ningún tipo pero no realizará la acción.

Para salir de dudas proba de la siguiente forma:
Código Delphi [-]
procedure PrintPDF(aFileName: TFileName);
begin
  if not FileExists(aFileName) then
    raise Exception.Create('Error en la ruta o el nombre del archivo');
  ShellExecute(Screen.ActiveForm.Handle, 'print', PChar(aFileName), nil ,nil, 0)
end;

// llamada:
...
begin
  PrintPDF('archivo.pdf');
end;


Saludos :)


Utilice el código sugerido, no me arroja ningún error, ya verifique manualmente que el archivo existe y que la dirección del archivo a imprimir es correcto, y nada lo ignora, pero cuando lo hago en la pc donde lo programo funciona perfecto.

Waldo 14-11-2013 03:23:49

Logre solucionarlo, curiosamente cuando me iba a la carpeta de los archivos pdf, y lo ejecutaba abría el acrobat sin problemas por lo que suponía que estaba asociado el archivo, hasta que utilice este código,
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
 errorcode: integer;
begin
 errorcode :=
  ShellExecute(0, 'open', pchar('c:\test.txt'), nil, nil, SW_NORMAL);
 case errorcode of
  2:showmessage('file not found');
  3:showmessage('path not found');
  5:showmessage('access denied');
  8:showmessage('not enough memory');
  32:showmessage('dynamic-link library not found');
  26:showmessage('sharing violation');
  27:showmessage('filename association incomplete or invalid');
  28:showmessage('DDE request timed out');
  29:showmessage('DDE transaction failed');
  30:showmessage('DDE busy');
  31:showmessage('no application associated with the given filename extension');
 end;

que me ayudo claramente que era lo que sucedía. y Bingo según el sistema no hacia ninguna aplicación asociada al archivo ( raro) por lo que tuve que renacer la asociación de archivo y listo. Gracias a todos por el interés y su tiempo.

AzidRain 15-11-2013 01:36:16

La solución que encontraste era la primera a probar. Si no tienes asociada ninguna aplicación a un archivo x, así mandes n comandos windows nunca hará nada con ellos porque no sabe con que aplicación usarlos. Lo quise poner aquí para que sirva de referencia a alguien con la misma duda.

ecfisa 15-11-2013 02:11:42

Hola AzidRain.

Y tenés toda la razón en tu apreciación. Pero del mensaje #12, creí entender que ya había explorado esa posibilidad:
Cita:

Empezado por Waldo (Mensaje 469583)
Gracias por contestar, Tengo instalado varia impresoras que el mismo sistema utiliza sin problemas, también esta instalado el programa asociado al archivo en este caso el pdf, la cola de impresión esta vacía, y eso sucede en las otras dos maquinas que utilizan windows 7, ya revise permisos del ejecutable, todas las maquinas son a 32 bits, donde si funciona es en windows 8, y es precisamente donde se programa en delphi 7.

Saludos :)


La franja horaria es GMT +2. Ahora son las 08:47:23.

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