Delphi - MS Word esemény kezelése

forráskód letöltése
Az alábbi példában egy olyan kis alkalmazást készítünk, ami a Word-ben történő különböző eseményeket naplózza. Az események figyeléséhez egy új osztályt kell létrehoznunk, amit a TInterfacedObject, IDispatch és IUnknown osztályokból származtatunk.
  TWordEvents = class(TInterfacedObject, IUnknown, IDispatch)
A QueryInterface függvény az IUnknown osztály deklarációjában szerepel. A QueryInterface egy hozzáférést ad a megadott interfészhez, amennyiben az objektum támogatja azt. Ennek kódja a következő:
  Result := E_NOINTERFACE;
  if GetInterface(IID, Obj) then Result := S_OK;
  if IsEqualGUID(IID, ApplicationEvents2) and GetInterface(IDispatch, Obj) then Result := S_OK;
Az IID paraméter a kérdezett interfész GUID-je. Az új osztály az ApplicationEvents2 interfészt támogatja, amiben a Word eseményei vannak deklarálva. Ehhez szükség van a Word_TLB unit-ra, amit a Word Type Library importálásával készíthetünk el. Ehhez nyissuk meg a Delphi Project menüjének Import Type Library menüpontját. A listából válasszuk ki a Microsoft Word x.0 Object Library-t, és kattintsunk a Create gombra.

Az osztály konstruktorában elindítjuk a Word-öt, majd az InterfaceConnect metódussal csatlakoztatjuk az ApplicationEvents2 interfészt az osztályhoz.
  FWordApp:=CoWordApplication.Create;
  InterfaceConnect(FWordApp, ApplicationEvents2, self, FConnection);
Ezután az Invoke függvény minden esetben lefut, amikor egy esemény bekövetkezik. Ennek DispID paraméteréből megtudhatjuk, hogy melyik esemény futott le. Ezekhez előzőleg konstansokat hoztunk létre, hogy a forráskód átláthatóbb legyen.

Az osztály destruktorában lecsatlakoztatjuk az interfészt, és bezárjuk a Word-öt.
InterfaceDisconnect(FWordApp, ApplicationEvents2, FConnection);
try
FWordApp.Quit;
except;
AddMessage('A Word bezárása közben hiba történt!');
end;
A naplózandó események a következő
    Startup: a Word indításakor következik be. Quit: kilépéskor következik be. DocumentChange: új dokumentum létrehozásakor, meglévő dokumentum megnyitásakor, vagy egy másik dokumentumra történő átváltáskor jön létr
A következő események csak Word 2000-ben létezne
    DocumentBeforeClose: a dokumentum bezárása előtt jön létre. DocumentBeforePrint: a dokumentumkinyomtatása előtt jön létre. DocumentBeforeSave: a dokumentum mentése előtt jön létre. DocumentOpen. dokumentum megnyitása. NewDocument: új dokumentum létrehozása. WindowActivate: ablak aktivizálása. WindowBeforeDoubleClick: az ablakra történő dupla kattintás előtt jön létre. WindowBeforeRightClick: az ablakra jobb egérgombbal történő kattintás előtt jön létre. WindowDeactivate: akkor jön létre, amikor az ablak elveszíti a fókuszt. WindowSelectionChange: a kijelölés megváltozásakor jön létr