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

Como abrir un documento pdf desde mi aplicacion
Comenzado por
JoAnCa
, jun 07 2012 06:47
3 respuestas en este tema
#1
Escrito 07 junio 2012 - 06:47
#2
Escrito 07 junio 2012 - 06:55
Añade al uses de unidad ShellAPi y luego puedes hacerlo así:
Versión corta:
Versión larga con mensajes de error:
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:
Versión corta:
delphi
ShellExecute(Application.Handle,'', PChar(fic), nil,nil,SW_SHOW);
Versión larga con mensajes de error:
delphi
function EjecutaFic(fic: string; mute: boolean = false): boolean; var code: integer; txt: string; begin Result:= false; //Pruebo a abrir el fichero... code:= ShellExecute(Application.Handle,'', PChar(fic), nil,nil,SW_SHOW); if (code<0) or (code>32) then Result:= true //Todo ha ido bien else begin case code of //Algo ha ocurrido 0: txt := 'El sistema operativo se ha quedado sin memoria o recursos.'; 2: txt := 'El archivo especificado no se ha encontrado.'; 3: txt := 'La ruta especificada no es válida.'; 5: txt := 'El sistema operativo denegó el '+ 'acceso al fichero especificado.'; 8: txt := 'No hay suficiente memoria para completar la operación'; 10: txt := 'Versión de Windows errónea.'; 11: txt := 'El fichero .EXE es inválido (non-Win32 .EXE or ' + 'error in .EXE image).'; 12: txt := 'La aplicación se diseñó para un sistema operativo distinto.'; 13: txt := 'La aplicación se diseño para MS-DOS 4.0'; 15: txt := 'Intento de carga de un programa real-mode.'; 16: txt := 'Intento de cargar una segunda instancia de una aplicación '+ 'sin segmentos de datos non-readonly.'; 19: txt := 'Intento de carga de un fichero de aplicación comprimido.'; 20: txt := 'Fallo en el fichero DLL (Dynamic-link library).'; 26: txt := 'Violación de compartición.'; 27: txt := 'El nombre de fichero asociado es incompleto o no es válido.'; 28: txt := 'La transacción DDE no se pudo completar debido a que la petición expiró.'; 29: txt := 'La transacción DDE falló.'; 30: txt := 'La transacción DDE no se pudo completar debido a que otras '+ 'transacciones DDE estaban siendo procesadas.'; 31: begin //No hay programa asociado, abro formulario de abrir con... shellexecute(Application.handle,'open','RUNDLL32.EXE',PChar('shell32.dll,OpenAs_RunDLL '+fic),nil,sw_shownormal); Result:= true; exit; end; 32: txt := 'No se pudo encontrar la DLL especificada.'; else txt := 'Error inesperado'; end; //Si no estamos en mute, lanzo un mensaje con el error encontrado if not mute then ShowMessage('Error '+IntToStr(code)+': '+txt); end; 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
Fichero:= ExtractFilePath(ParamStr(0))+'Ayuda.pdf'; EjecutaFic(Fichero);
#3
Escrito 07 junio 2012 - 07:03
Yo lo hago de esta manera, colocando el archivo de ayuda en la carpeta del ejecutable.
delphi
uses SHELLAPI ... if FileExists(ExtractFilePath(Application.ExeName) + 'AYUDA GENERAL.Pdf') then ShellExecute(Handle, 'open', PChar(ExtractFilePath(Application.ExeName) + 'AYUDA GENERAL.Pdf'), nil, nil, SW_SHOWNA)
#4
Escrito 07 junio 2012 - 08:22
Muchas gracias a los dos
Tema Resuelto
Tema Resuelto