Lecture de fichier pdf [Résolu]

cs_philpas 77 Messages postés lundi 17 octobre 2005Date d'inscription 4 septembre 2008 Dernière intervention - 12 avril 2006 à 10:48 - Dernière réponse : Danfas 3 Messages postés vendredi 25 juin 2004Date d'inscription 16 novembre 2006 Dernière intervention
- 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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
cs_philpas 77 Messages postés lundi 17 octobre 2005Date d'inscription 4 septembre 2008 Dernière intervention - 19 avril 2006 à 09:41
3
Merci
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.

Merci cs_philpas 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de cs_philpas
Utilisateur anonyme - 12 avril 2006 à 12:29
0
Merci
Salur,

Pour fermer acrobat tu dois killer le process

A+
Commenter la réponse de Utilisateur anonyme
cs_philpas 77 Messages postés lundi 17 octobre 2005Date d'inscription 4 septembre 2008 Dernière intervention - 12 avril 2006 à 12:53
0
Merci
et comment on kill un process ?
Commenter la réponse de cs_philpas
Utilisateur anonyme - 12 avril 2006 à 13:09
0
Merci
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;
Commenter la réponse de Utilisateur anonyme
Danfas 3 Messages postés vendredi 25 juin 2004Date d'inscription 16 novembre 2006 Dernière intervention - 16 nov. 2006 à 13:24
0
Merci
Sympa le fonction Killprocess

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.