Lecture de fichier pdf

Résolu
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008 - 12 avril 2006 à 10:48
Danfas Messages postés 3 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 16 novembre 2006 - 16 nov. 2006 à 13:24
bonjour, j'ai un soucis avec la lecture de fichiers pdf.
J'ai installé dans delphi 6 l'activeX acrobat en suivant la procédure de ce site
http://delphipage.free.fr/lirepdf.html
Je voulais intégrer la possibilité de lire les Pdf dans mon programme, mais je constate ceci:
Pour faire simple j'ai utilisé leur exemple.
il y a sur la fiche
Pdf1: TPdf; Panel1: TPanel; Button1: TButton; OpenDialog1: TOpenDialog;

procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then Pdf1.Src:=OpenDialog1.FileName;
end;

Lorsque je clique sur le bouton ouvrir, j'ouvre la liste des fichiers pdf, je clique sur un fichier, il s'ouvre. Jusque là ça marche. Je veux renouveler l'opération en ouvrant un autre fichier, je reclique donc sur le bouton ouvrir, je choisi un autre fichier et le programme me dit que j'ai une violation d'accès dans le module pdf.ocx. J'ai modifié Pdf1.Src:=OpenDialog1.FileName; en Pdf1.LoadFile(OpenDialog1.FileName);
Là, j'arrive à ouvrir plusieurs fois de suite un fichier Pdf. Mais je constate que même si je ferme l'application, le processus acrobat est toujours présent.
Ma question est la suivante: comment faut il faire pour quitter correctement l'application acrobat reader lorsque je ferme la fenêtre de visualisation?. Y a t-il une fonction que je n'ai pas trouver, du genre Pdf1.Closefile? Si j'ouvre un nouveau fichier pdf , j'aimerais pouvoir fermer le pdf précédent.
Merci

5 réponses

cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008
19 avril 2006 à 09:41
Après quelques jours d'arrêt, je reprends la poursuite de mon programme. J'ai essayé la procédure proposé pour killer un processus ça ne marche pas. Mais voici une procédure que j'ai trouvé et qui fonctionne pour ceux à qui ça interresse.

function KillProcess(const ProcessName:String):Boolean;
var ProcessEntry32:TProcessEntry32;
HSnapShot,HProcess:THandle;
begin
Result:=False;
HSnapShot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if HSnapShot=0 then Exit;
ProcessEntry32.dwSize:=SizeOf(ProcessEntry32);
if Process32First(HSnapShot,ProcessEntry32) then
repeat
if CompareText(ProcessEntry32.szExeFile,ProcessName)=0 then
begin
HProcess:=OpenProcess(PROCESS_TERMINATE,False,ProcessEntry32.th32ProcessID);
if HProcess<>0 then
begin
Result:=TerminateProcess(HProcess,0);
CloseHandle(HProcess);
end;
Break;
end;
until not Process32Next(HSnapShot,ProcessEntry32);
CloseHandle(HSnapshot);
end;

Remarque: Sous Win9*, il faut indiquer le chemin complet du processus à tuer. Sous Win2000, le nom du fichier suffit.

Voilà, et encore merci à tous.
3
Utilisateur anonyme
12 avril 2006 à 12:29
Salur,

Pour fermer acrobat tu dois killer le process

A+
0
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008
12 avril 2006 à 12:53
et comment on kill un process ?
0
Utilisateur anonyme
12 avril 2006 à 13:09
Procedure Kill'em all; //Ptit coucou à un groupe myhtique
var
Handler : integer;
begin
Handler := FindWindow('ton application.exe', nil );
if Handler > 0 then
PostMessage( Handler, WM_CLOSE, 0, 0 );
end;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Danfas Messages postés 3 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 16 novembre 2006
16 nov. 2006 à 13:24
Sympa le fonction Killprocess

En effet la classique Postmessage(handler,WM_close,0,0) n'est pas efficace a 100% loin s en faut.
0