Ir al contenido


Foto

Como abrir un documento pdf desde mi aplicacion


  • Por favor identifícate para responder
3 respuestas en este tema

#1 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 07 junio 2012 - 06:47

Hola a todos
Lo que necesito es que cuando el usuario  solicite la ayuda, se abra el Manual de Usuario que es un documento PDF, es decir, al hacer clic en el menu Ayuda en lugar de abrir los archivos clasicos de ayuda, se abra el documento pdf
Puede ser abrir el archivo externo o abrirlo dentro de un formulario de la aplicacion, cualquier metodo me sirve

  • 0

#2 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 07 junio 2012 - 06:55

Añade al uses de unidad ShellAPi y luego puedes hacerlo así:

Versión corta:



delphi
  1. ShellExecute(Application.Handle,'', PChar(fic), nil,nil,SW_SHOW);



Versión larga con mensajes de error:



delphi
  1. function  EjecutaFic(fic: string; mute: boolean = false): boolean;
  2. var
  3.   code: integer;
  4.   txt: string;
  5. begin
  6.   Result:= false;
  7.   //Pruebo a abrir el fichero...
  8.   code:= ShellExecute(Application.Handle,'', PChar(fic), nil,nil,SW_SHOW);
  9.  
  10.   if (code<0) or (code>32) then
  11.     Result:= true  //Todo ha ido bien
  12.   else begin
  13.     case code of //Algo ha ocurrido
  14.       0: txt := 'El sistema operativo se ha quedado sin memoria o recursos.';
  15.       2: txt := 'El archivo especificado no se ha encontrado.';
  16.       3: txt := 'La ruta especificada no es válida.';
  17.       5: txt := 'El sistema operativo denegó el '+
  18.                 'acceso al fichero especificado.';
  19.       8: txt := 'No hay suficiente memoria para completar la operación';
  20.       10: txt := 'Versión de Windows errónea.';
  21.       11: txt := 'El fichero .EXE es inválido (non-Win32 .EXE or '
  22.                           + 'error in .EXE image).';
  23.       12: txt := 'La aplicación se diseñó para un sistema operativo distinto.';
  24.       13: txt := 'La aplicación se diseño para MS-DOS 4.0';
  25.       15: txt := 'Intento de carga de un programa real-mode.';
  26.       16: txt := 'Intento de cargar una segunda instancia de una aplicación '+
  27.                 'sin segmentos de datos non-readonly.';
  28.       19: txt := 'Intento de carga de un fichero de aplicación comprimido.';
  29.       20: txt := 'Fallo en el fichero DLL (Dynamic-link library).';
  30.       26: txt := 'Violación de compartición.';
  31.       27: txt := 'El nombre de fichero asociado es incompleto o no es válido.';
  32.       28: txt := 'La transacción DDE no se pudo completar debido a que la petición expiró.';
  33.       29: txt := 'La transacción DDE falló.';
  34.       30: txt := 'La transacción DDE no se pudo completar debido a que otras '+
  35.                 'transacciones DDE estaban siendo procesadas.';
  36.       31: begin  //No hay programa asociado, abro formulario de abrir con...
  37.             shellexecute(Application.handle,'open','RUNDLL32.EXE',PChar('shell32.dll,OpenAs_RunDLL '+fic),nil,sw_shownormal);
  38.             Result:= true;
  39.             exit;
  40.           end;
  41.       32: txt := 'No se pudo encontrar la DLL especificada.';
  42.       else
  43.         txt := 'Error inesperado';
  44.     end;
  45.     //Si no estamos en mute, lanzo un mensaje con el error encontrado
  46.     if not mute then
  47.       ShowMessage('Error '+IntToStr(code)+': '+txt);
  48.   end;
  49. end;



Donde fic es la ruta competa al fichero pdf, que lo más normal es que lo copies junto al ejecutable, con lo que el uso sería este:



delphi
  1. Fichero:= ExtractFilePath(ParamStr(0))+'Ayuda.pdf';
  2. EjecutaFic(Fichero);


  • 0

#3 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 07 junio 2012 - 07:03

Yo lo hago de esta manera, colocando el archivo de ayuda en la carpeta del ejecutable.



delphi
  1. uses
  2. SHELLAPI
  3. ...
  4.  
  5.   if FileExists(ExtractFilePath(Application.ExeName) + 'AYUDA GENERAL.Pdf') then
  6.     ShellExecute(Handle, 'open', PChar(ExtractFilePath(Application.ExeName) +
  7.       'AYUDA GENERAL.Pdf'), nil, nil, SW_SHOWNA)


  • 0

#4 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 07 junio 2012 - 08:22

Muchas gracias a los dos
Tema Resuelto
  • 0




IP.Board spam blocked by CleanTalk.