Delphi - Word dokumentumok megfigyelése a háttérben

forráskód letöltése
A mellékelt példában egy olyan programot készítünk, amely egy listában megjeleníti az éppen megnyitott Word dokumentumokat, és amikor egyet kiválasztunk a listából, akkor egy TMemo komponensben megjeleníti annak szövegét. A Form OnCreate eseményénél csatlakozunk a Word alkalmazáshoz. Ezt először a GetActiveOleObject függvénnyel próbáljuk megtenni, és ha ez sikertelen, akkor mi magunk nyitjuk meg a Word-öt a CreateOleObject függvénnyel:
var
  FWordApp: OleVariant;
...
  try
    FWordApp:=GetActiveOleObject('Word.Application');
  except
    FWordApp:=CreateOleObject('Word.Application');
  end;
A nyitott dokumentumok listáját egy TListBox komponensben jelenítjük meg, amit a Button1 OnClick eseményében töltünk fel.
A Documents objektumon keresztül férhetünk hozzá a Word-ben megnyitott dokumentumok listájához. Ennek Count property-jéből megtudhatjuk, hogy hány dokumentum van nyitva. Az Item függvénnyel kérdezhetjük le a paraméterként megadott sorszámú dokumentum objektumát. A dokumentum objektumának FullName property-jéből kiolvashatjuk annak nevét, ami általában a fájlnév elérési útvonallal együtt, illetve új dokumentumnál például „Dokumentum1” lesz.

A ListBox OnClick eseményénél kiolvassuk a kiválasztott dokumentum szövegét. Ehhez első lépésben lekérdezzük a dokumentum objektumát, ami itt is a Docuemnts.Item függvénnyel történik.
Document:=FWordApp.Documents.Item(i);

A szöveget bekezdésenként fogjuk kiolvasni, és feldolgozni. Mivel a Word-ben a különböző formázások miatt a szöveg kiolvasásakor rengeteg üres sor és speciális karakter lenne (<#32), ezért egy belső függvénnyel ezeket kiszűrjük.
A bekezdésekhez a Document objektum Paragraphs property-jén keresztül juthatunk el. Ez szintén egy objektum, ami a dokumentum bekezdéseit tartalmazza. A Count property-ből megtudjuk, hogy összesen hány bekezdés van, és egy ciklusban sorban beolvassuk ezeket. Az egyes bekezdésekhez tartozó objektumokat - hasonlóan a Documents objektumhoz, - az Item függvénnyel kérdezhetjük le. Az így megkapott Paragraph objektumok Range property-jének Text mezőjéből kiolvasható az adott bekezdés szövege. Ezt hozzáadjuk a Memo komponens soraihoz, de közben ügyelünk arra, hogy két üres sor ne lehessen egymás után.