Results 1 to 8 of 8

Thread: Word events afvangen

  1. #1

    Word events afvangen

    Geacht forum

    Ik wil vanuit Delphi (XE2) een word document openen en daarna het event DocumentBeforeSave afvangen. Ik kan het gemaakte programma wel compileren, maar als ik het run en het document na wijzigingen opsla, komt het programma niet in de aangewezen eventhandler, maar krijg ik een access-violation.

    De code die na een buttonklik doorlopen wordt, ziet er als volgt uit:

    WordApplication := TWordApplication.Create(Self);
    WordDocument := TWordDocument.Create(Self);
    WordApplication.ConnectKind := ckNewInstance;
    WordApplication.OnDocumentBeforeSave := WordDocumentBeforeSave;
    WordApplication.OnQuit := WordAppQuit;
    WordDocument.OnClose := DocumentOnClose;
    WordApplication.Connect;

    WordApplication.Visible := True;
    WordDocument.ConnectTo(
    WordApplication.Documents.Open('T:\xxx.docx',
    EmptyParam, EmptyParam,
    EmptyParam, EmptyParam, EmptyParam,
    EmptyParam, EmptyParam, EmptyParam,
    EmptyParam, EmptyParam, EmptyParam));
    De eventhandlers zien er als volgt uit:

    procedure TForm1.DocumentOnClose(ASender: TObject);
    begin
    ShowMessage('Close Document');
    end;

    procedure TForm1.WordDocumentBeforeSave(ASender: TObject;
    Doc: WordDocument; var SaveAsUI, Cancel: WordBool);
    begin
    try
    Cancel := false;
    ShowMessage(Doc.Name + ' saved');
    except


    end;
    end;


    Probleem is dus, dat ik bij het saven van het geopende document in Word niet in WordDocumentBeforeSave terecht kom, maar een access-violation krijg. De eventhandlers DocumentOnClose en WordAppQuit werken wel.

    Iemand enig idee, wat ik fout doe?

    Groeten, jan

  2. #2
    Heeft WordDocumentBeforeSave de juiste calling convention (waarschijnlijk StdCall)?
    [edit]
    Nevermind. Dat klinkt niet echt logisch in dit geval.
    Last edited by GolezTrol; 21-Aug-14 at 11:31.
    1+1=b

  3. #3
    WordDocumentBeforeSave heb ik gedeclareerd in het protected deel van het form als
    procedure WordDocumentBeforeSave(ASender: TObject; const Doc: WordDocument; var SaveAsUI, Cancel: WordBool);
    Waar zou ik dan StdCall moeten plaatsen?

    Overigens heb ik DocumentOnClose en WordAppQuit op dezelfde manier gedeclareerd. Het lijkt erop dat het wel goed gaat wanneer deze functies maar een parameter hebben,

    Groeten, Jan

  4. #4
    Nee, die stdcall is het niet. Wat het wel is weet ik niet. Ik heb een TWordApplication gebruikt in Delphi 2007 en kan deze fout niet reproduceren.
    1+1=b

  5. #5
    mnemonics
    Guest
    Is Doc wel assigned?

  6. #6
    Het programma komt niet eens in de eventhandler WordDocumentBeforeSave, dus ik kan ook niet controleren of de parameter Doc ge-assigned is.
    Groeten, Jan

  7. #7
    Quote Originally Posted by JanReynaerts View Post
    procedure TForm1.WordDocumentBeforeSave(ASender: TObject;
    Doc: WordDocument; var SaveAsUI, Cancel: WordBool);
    begin
    // ....
    Quote Originally Posted by JanReynaerts View Post
    WordDocumentBeforeSave heb ik gedeclareerd in het protected deel van het form als
    procedure WordDocumentBeforeSave(ASender: TObject; const Doc: WordDocument; var SaveAsUI, Cancel: WordBool);
    Waarom zijn de gedeclareerde procedure en de werkelijke procedure anders? (zie de "const" voor Doc:...)
    Van welke .pas maakt XE2 gebruik? (waar is WordDocument dos gedefinieerd?)
    Is de OnWordDocumentSave-declaratie in die .pas ook identiek?

  8. #8
    Sorry, verkeerd doorgegeven. Bij de werkelijke procedure heb ik ook const staan.

    Ik heb zojuist een nieuwe word_TLB gegeneerd op basis van Word 2013, maar ik krijg de fout nog steeds, terwijl mijn OnWordDocumentSave-declarative exact hetzelfde is als die in word_TLB. Zou het misschien liggen aan de var parameters in WordDocumentBeforeSave? In een discussie uit 2002 las ik dat de var-parameters problemen geven. Maar dat zou toch allang opgelost moeten zijn.

    Groeten, Jan

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 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
  •