Supongo que tendrás instalado el Acrobat Reader en la máquina en donde quieras ver el pdf. Entonces, tendrías que poner lo siguiente: procedure TForm1.Button1Click(Sender: TObject); procedure RunAndWaitShell(Ejecutable, Argumentos: string; Visibilidad:integer); var Info:TShellExecuteInfo; pInfo:PShellExecuteInfo; exitCode:DWord; begin {Puntero a Info} {Pointer to Info} pInfo:=@Info; {Rellenamos Info} {Fill info} with Info do begin cbSize:=SizeOf(Info); fMask:=SEE_MASK_NOCLOSEPROCESS; wnd:=Handle; lpVerb:=nil; lpFile:=PChar(Ejecutable); {Parametros al ejecutable} {Executable parameters} lpParameters:=Pchar(Argumentos+#0); lpDirectory:=nil; nShow:=Visibilidad; hInstApp:=0; end; {Ejecutamos} {Execute} ShellExecuteEx(pInfo); {Esperamos que termine} {Wait to finish} repeat exitCode := WaitForSingleObject(Info.hProcess,500); Application.ProcessMessages; until (exitCode <> WAIT_TIMEOUT); end; begin RunAndWaitShell('c:\rutadelarchivoreader\reader.exe','c:\rutadelarchivo\nombrearchivo.pdf',Sw_ShowNormal); end; Otra forma: -Añade 'ShellApi' en el uses de tu form, y ejecuta esto: ShellExecute(Form1.Handle,nil,PChar('c:\rutapdf\archivo.pdf'),'','',SW_SHOWNORMAL); Form1.Handle es el handle a la form. Si tu form se llama de otra manera... cambialo. Dentro del PChar() puedes poner una variable string sin problemas, es decir, podrías hacer: var fichero:string; begin fichero:='c:\rutapdf\archivo.pdf'; ShellExecute(Form1.Handle,nil,PChar(fichero),'','',SW_SHOWNORMAL); end; Si te sirvió, no te olvides de calificarme en TodoExpertos. Si no, avisame qué es lo que no entendí. Marcelo
No he conseguido hacer funcionar el método shellExecute, sin embargo he conseguido abrir el pdf ejecutando primero el explorador con esta instrucción y luego abriendo el pdf sobre el. WinExec(PChar('"c:\archivos de programa\internet explorer\iexplore.exe" "ruta del .pdf"'),SW_SHOWNORMAL); Gracia por tu ayuda
Ahora si, gracias por todo, ya conseguí hacer funcionar el shellExecute, muchas gracias, mejor tu solución que no la que había encontrado yo.