Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-12-2013
[Waldo] Waldo is offline
Miembro Premium
 
Registrado: sep 2003
Posts: 101
Poder: 21
Waldo Va por buen camino
Problemas con shellexecute

Buen día y felices fiestas.

Tengo un problema con la impresión de un documento pdf, curiosamente funciona en una pc y en la otra no. con el siguiente codigo.
Código Delphi [-]
  FOR i:=1 TO copias DO
            BEGIN
               dd:=G.Empresa_CaminoImportarCFDI+'\'+FOLIOELECTRONICO.Prefix+edit_folio.Text+'.pdf';
               codigoerror:=shellExecute(Self.Handle,'print',PChar(G.Empresa_CaminoImportarCFDI+'\'+FOLIOELECTRONIC  O.Prefix+edit_folio.Text+'.pdf'),NIL,NIL,0);
               CASE codigoerror OF
                  0:ShowMessage('The operating system is out of memory or resources. ');
                  2:showmessage('file not found');
                  3:showmessage('path not found');
                  5:showmessage('access denied');
                  8:showmessage('not enough memory');
                  10:showmessage('Wrong Windows version');
                  11:showmessage('The .EXE file is invalid (non-Win32 .EXE or error in .EXE image)');
                  12:showmessage('Application was designed for a different operating system');
                  13:showmessage('Application was designed for MS-DOS 4.0');
                  15:showmessage('Attempt to load a real-mode program');
                  16:showmessage('Attempt to load a second instance of an application with non-readonly data segments.');
                  19:showmessage('Attempt to load a compressed application file.');
                  20:showmessage('Dynamic-link library (DLL) file failure.');
                  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');
                  32:showmessage('dynamic-link library not found');
               END;

               //PrintPDF(dd);
            END;

Por lo que ya descarte que este asociado con un programa lector de pdf, asi como también e descubierto que solo imprime una vez, y una vez que se creo el proceso, ya no se puede ejecutar ni siquiera acrobat reader por separado sin antes terminar el proceso. Ojala me ayuden creo que debo matar ese proceso cada vez que deseo ejecutar la impresión con el shellexecute. de antemano gracias.
Responder Con Cita
  #2  
Antiguo 28-12-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Waldo,

Cita:
Empezado por Waldo
...Tengo un problema con la impresión de un documento PDF...curiosamente funciona en una pc y en la otra no...ya descarte que este asociado con un programa lector de PDF...también e descubierto que solo imprime una vez, y una vez que se creo el proceso, ya no se puede ejecutar ni siquiera Acrobat Reader por separado sin antes terminar el proceso...
Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ShellAPI;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
   Copies : Integer = 10;

var
   MsgErr : String;
   openDialog : TOpenDialog;
   i, CodErr : Integer;

begin

   openDialog := TOpenDialog.Create(self);
   openDialog.InitialDir := GetCurrentDir;
   openDialog.Options := [ofFileMustExist];
   openDialog.Filter := 'PDF Files|*.pdf';
   openDialog.FilterIndex := 1;

   if openDialog.Execute then
   begin

      MsgErr := EmptyStr;

      for i := 1 to Copies do
      begin

         CodErr := ShellExecute(Application.Handle,'print',PChar(openDialog.FileName),nil,nil,SW_MINIMIZE);

         case CodErr of
            0 : MsgErr := 'The operating system is out of memory or resources.';
            2 : MsgErr := 'file not found';
            3 : MsgErr := 'path not found';
            5 : MsgErr := 'access denied';
            8 : MsgErr := 'not enough memory';
           10 : MsgErr := 'Wrong Windows version';
           11 : MsgErr := 'The .EXE file is invalid (non-Win32 .EXE or error in .EXE image)';
           12 : MsgErr := 'Application was designed for a different operating system';
           13 : MsgErr := 'Application was designed for MS-DOS 4.0';
           15 : MsgErr := 'Attempt to load a real-mode program';
           16 : MsgErr := 'Attempt to load a second instance of an application with non-readonly data segments.';
           19 : MsgErr := 'Attempt to load a compressed application file.';
           20 : MsgErr := 'Dynamic-link library (DLL) file failure.';
           26 : MsgErr := 'sharing violation';
           27 : MsgErr := 'filename association incomplete or invalid';
           28 : MsgErr := 'DDE request timed out';
           29 : MsgErr := 'DDE transaction failed';
           30 : MsgErr := 'DDE busy';
           31 : MsgErr := 'no application associated with the given filename extension';
           32 : MsgErr := 'dynamic-link library not found';
         end;

         if MsgErr <> EmptyStr then
            raise Exception.Create(MsgErr);

      end;

   end;

end;

end.
El código anterior permite seleccionar un archivo PDF e imprimirlo 10 veces seguidas por medio del API ShellExecute, funcionando correctamente en todos los casos de prueba con Delphi 7 sobre Windows 7 Professional x32 y Adobe Acrobat Reader versión 11.0.04.63.

Pregunto:

1- ¿Que versión de Windows y Delphi esta utilizando la aplicación en cuestión?.

2- ¿El código se ejecuta en el hilo principal o en un hilo secundario?.

3- ¿Que tiene de diferente el PC en cuestión del PC en el cual si funciona la aplicación?.

4- ¿Haz hecho pruebas de la aplicación en modo Debug?

Te sugiero:

1- Probar en el PC en cuestión el código sugerido anteriormente para determinar si es un problema del PC o de la aplicación, si funciona es conveniente revisar la aplicación para determinar que parte de la misma puede estar causando el problema.

2- Desinstalar la actual versión de Acrobat Reader PDF del PC en cuestión.

3- Instalar la última versión de Acrobat Reader PDF y realizar nuevamente las pruebas de impresión.

4- En caso de que el programa vuelva a fallar después de ejecutar los puntos anteriores sería conveniente cargar Windows en Modo Diagnostico con el Antivirus Deshabilitado y probar el programa nuevamente, si funciona hay que entrar en un proceso de pruebas (Ensayo y Error) para descartar que programa o servicio esta causando la falla reportada, en caso contrario hay que considerar revisar la instalación de Windows, te sugiero en Modo Diagnostico con el Antivirus Deshabilitado usar el comando SFC /Scannow para reparar los archivos del SO que así lo requieran y realizar nuevamente las pruebas de impresión.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 28-12-2013 a las 17:56:39.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problemas con ShellExecute ninguno C++ Builder 3 08-09-2008 20:45:38
Problemas con ShellExecute ZayDun Varios 4 27-03-2008 22:33:47
Shellexecute mjjj Varios 2 11-09-2007 17:41:21
Problemas con ShellExecute y Java. tryasta API de Windows 2 05-09-2005 19:09:41
Problemas con ShellExecute: lalo Varios 2 18-03-2005 15:04:52


La franja horaria es GMT +2. Ahora son las 02:32:59.


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
Copyright 1996-2007 Club Delphi