Results 1 to 4 of 4

Thread: TAcroPDF sluiten

  1. #1

    TAcroPDF sluiten

    Ik gebruik onderstaande code om een TAcroPDF te creëren en een PDF in te laten. Dat gaat allemaal goed. Maar als ik het form afsluit krijg ik een access violation. Deze krijg ik alleen als er ook daadwerkelijk een PDF is geladen. Als dat niet het geval is gebeurt dit niet. Ik heb de OnFormDestory vervangen door de button2click. Wat doe ik niet goed?

    Code:
    unit Unit1;
    
    
    interface
    
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls, AcroPDFLib_TLB;
    
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Panel1: TPanel;
        Button2: TButton;
        Button3: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        APDF: TAcroPDF;
        procedure LoadPDF;
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      inherited;
      APDF := TAcroPDF.Create(self);
      APDF.Parent := Panel1;
      APDF.Align := alClient;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      LoadPDF;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      APDF.Free;
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      inherited;
      APDF := TAcroPDF.Create(self);
      APDF.Parent := Panel1;
      APDF.Align := alClient;
    end;
    
    procedure TForm1.LoadPDF;
    begin
      APDF.LoadFile('H:\rapport.pdf');
    end;
    
    end.

  2. #2
    Ik heb inmiddels onderstaande code gevonden waarmee het wel goed lijkt te gaan:

    Code:
    var
      Ref : Integer;
    begin
      Ref := APDF.ControlInterface._AddRef;
      APDF.Src := '';
      APDF.Free;
      APDF:= Nil;
    end;
    Last edited by Pascal G++; 09-Nov-18 at 12:42.

  3. #3
    Ik loop nu wel nog tegen het probleem aan dat als ik voor de 2e keer een PDF bestand open in de TAcroPDF ik een andere view krijg. Dit heeft te maken met Acrobat.exe die geladen is. Kan ik vaststellen welke PID acrobat.exe er bij mij applicatie hoort en deze afsluiten?

  4. #4
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,313
    Quote Originally Posted by Pascal G++ View Post
    Ik heb de OnFormDestory vervangen door de button2click. Wat doe ik niet goed?
    Wanneer je een component creëert met een owner, dan hoef je hem zelf niet expliciet op te ruimen.
    Da's het hele idee achter een owner: een eigenaar is verantwoordelijk voor het leven van een component waarvan het eigenaar is.

    Bovenstaande geldt in ieder geval voor "Echte" componenten (afgeleiden van TComponent); bij ActiveX-componenten moet je deze
    regel soms "Een beetje buigen" omdat die in beginsel niet geschreven zijn met (de manier van werken van) Delphi in het achterhoofd.
    In die gevallen is het soms betrouwbaarder (of alleen werkbaar) door ze zonder owner te creëren; je moet ze dan alleen wél zelf weer
    expliciet opruimen wanneer je ze niet meer nodig hebt.
    TMemoryLeak.Create(Nil);

Thread Information

Users Browsing this Thread

There are currently 2 users browsing this thread. (0 members and 2 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •