Delphi - Word szövegeinek beillesztése képként

forráskód letöltése
A Microsoft Office csomag szoftverei kiválóan elérhetők alkalmazásainkból, tetszőleges funkciójukat igénybe vehetjük, jól kiegészíthetik programjaink képességeit. A Microsoft Word alkalmazással létrehozott dokumentumokat kedvünkre olvashatjuk, és írhatjuk a megfelelő metódusok segítségével. Cikkünkben a Microsoft Word alkalmazás egy olyan funkciójával ismerkedhetünk meg, melynek segítségével a dokumentum szövegét képként jelenítjük meg alkalmazásunkban.
A mellékelt példa használata előtt importálnia kell a Microsoft Word komponenst. Ennek módja a következő: a Project menüből válasszuk ki az Import Type Library menüpontot. A listában keressük meg a Microsoft Word elemet. A Create Unit gombbal hozzuk létre a unit-ot, amelyre a programban a uses kulcsszó után hivatkozunk.
A megoldás lényege, hogy alkalmazásunkban megnyitjuk a mellékelt sample.doc Word dokumentumot, majd a dokumentum teljes szövegét egy képként másoljuk ki a Vágólapra. A Vágólapon hagyott képet pedig az alkalmazás űrlapjára helyezett TImage kontrolban megjelenítjük.
Az első lépés tehát, hogy megnyissuk a Word dokumentumot. Erre az Open metódust használjuk az aktív dokumentum esetében.
wa := CreateOleObject('Word.Application');
FileName := ExtractFilePath(Application.ExeName)+'sample.doc';
wa.Documents.Open(FileName);
Az aktív dokumentum Content property-je azonosítja a dokumentum teljes tartalmát. Ennek meg kell hívnunk a Select metódusát annak érdekében, hogy a teljes tartalom kijelölt legyen.
wa.ActiveDocument.Content.Select;
A Word alkalmazás Selection property-je tartalmazza a kijelölt részt. A kijelölt rész CopyAsPicture metódusával érhetjük el, hogy a kijelölt tartalom képként mentődjön el.
wa.Selection.CopyAsPicture;
Ekkor a tartalom végére navigálunk úgy, hogy meghívjuk a Collapse metódust a Word.WdCollapseDirection.wdCollapseEnd konstanssal a paraméterben.
direction := wdCollapseEnd;
wa.Selection.Collapse(direction);
Majd a Word.WdPasteDataType.wdPasteMetafilePicture konstanst átadva a PasteSpecial metódusnak elérhetjük, hogy az imént kimásolt kép a tartalom végére kerüljön beillesztésre.
t := wdPasteMetafilePicture;
wa.Selection.PasteSpecial(EmptyParam,EmptyParam,EmptyParam,EmptyParam,t,EmptyParam,EmptyParam);
Ezt követően – mivel az egyszerűség kedvéért most csak egy kép található a dokumentumban – egy Shape objektumba helyezzük a dokumentum egyetlen képét, mely a szöveg másolatát tartalmazza.
shape := wa.ActiveDocument.Shapes.Item(1);
A Shape objektumot InlineShape objektummá alakítjuk, a képet a Vágólapra helyezzük, majd töröljük is egyben, hogy ne maradjon a dokumentumban.
ishape := shape.ConvertToInlineShape;
ishape.Range.CopyAsPicture;
ishape.Delete;
Végül bezárjuk a Word dokumentumot, és az alkalmazást is.
wa.ActiveDocument.Close;
wa.Quit;
Nincs más teendőnk, mint a Vágólapról egy TBitmap objektumban elhelyezni, és a Form TImage kontroljában megjeleníteni a képet.
Az adatfolyam tartalmának ellenőrzése után a TBitmap objektumba kerül a kép, majd meg is jelenítjük azt.
if ClipBoard.HasFormat(CF_METAFILEPICT) then begin
  bmp := TBitmap.Create;
  with bmp do begin
    Assign(ClipBoard);
    Image1.Picture.Assign(bmp);
    Free;
  end;
end;