cs_philpas
Messages postés77Date d'inscriptionlundi 17 octobre 2005StatutMembreDernière intervention 4 septembre 2008
-
12 avril 2006 à 10:48
Danfas
Messages postés3Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention16 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
cs_philpas
Messages postés77Date d'inscriptionlundi 17 octobre 2005StatutMembreDerniè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.
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;
Vous n’avez pas trouvé la réponse que vous recherchez ?