Delphi - Word dokumentum képeinek formázása

forráskód letöltése
Készítünk egy komponenst, amely segítségével egy megadott Word dokumentum összes képét megformázzuk. A képek szélességét és magasságát a felére csökkentjük, színüket szürkeskálára, körbefuttatásuk stílusát pedig négyzetesre állítjuk.
A mellékelt példaprogram megnyitása előtt a WordImageFormat.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A WordImageFormat komponens egy Word dokumentum összes képénél beállítja a következő formázási lehetőségeket: 50%-os szélesség és magasság, szürkeskála, négyzetes körbefuttatás.
A komponens WordDoc tulajdonságában adhatjuk meg a formázandó Word dokumentum elérési útját és nevét. A formázás az Execute metódus meghívására kezdődik. Az összes kép formázásra kerül.
A formázás aktuális állapotáról az OnFind eseményen keresztül nyerhetünk információkat.
TFindEvent = procedure(Sender: TObject; Count, Index: LongInt) of object; 
Az esemény minden egyes alkalommal létrejön, amikor a komponens egy új képet talál a dokumentumban.
A Count paraméter a képek számát, még az Index paraméter az eddig megformázott képek számát adja vissza. A két változó értékét felhasználhatjuk például arra, hogy a feldolgozás állapotát egy ProgressBar segítségével megjelenítsük.
ProgRessBar1.Max:=Count;
ProgRessBar1.Position:=Index;
A komponenst a TComponent osztályból származtatjuk. A háttérben megnyitjuk a Word programot, majd betöltjük a megadott dokumentumot.
WordApp:=CreateOleObject('Word.Application');
WordApp.Documents.Open(FWordDoc);
A Word alkalmazás megnyitásához a WordApp, OleVariant típusú változót használjuk. A típus használatához a uses listában fel kell sorolnunk a COMOBJ unit nevét is.
A dokumentumban szereplő képeket az InLineShapes kollekció tárolja. A képek számát az alábbi módon kérdezhetjük le.
Count:=WordApp.ActiveDocument.InLineShapes.Count;
Miután tudjuk a képek számát, egy for ciklus segítségével könnyedén feldolgozhatjuk azokat.
Minden egyes alkalommal, amikor a ciklus lép egyet, meg kell hívnunk az OnFind eseményt.
if Assigned(FOnFind) then
  FOnFind(Self,Count,i);
Ha egy képnél módosítani szeretnénk a körbefuttatás stílusát, akkor a képet alakzattá kell konvertálnunk.
WordApp.ActiveDocument.InLineShapes.Item(1).Select;
WordApp.Selection.InLineShapes.Item(1).ConvertToShape;
A Select metódus kijelöli a megadott képet. Hogy a képet alakzattá tudjuk konvertálni, a Selection osztályt kell használnunk. A konverziót a ConvertToShape metódus hajtja végre.
Az alakzatokat a Shapes kollekció tárolja. Amikor egy InLineShape objektumot Shape objektummá konvertálunk, akkor az InLineShapes kollekció elemeinek száma eggyel csökken, a Shapes kollekció elemeinek száma pedig eggyel nő. Ezért kell mindig csak az első elemet konvertálnunk, az InLineShapes kollekcióból.
Miután a képet alakzattá konvertáltuk, szélességét és magasságát a felére csökkentjük.
WordApp.ActiveDocument.Shapes.Item(i).ScaleWidth(0.5,True);
WordApp.ActiveDocument.Shapes.Item(i).ScaleHeight(0.5,True);
A szürkeskála beállítása az alábbi módon lehetséges.
WordApp.ActiveDocument.Shapes.Item(i).PictureFormat.ColorType:=msoPictureGrayscale;
A négyzetes körbefuttatást a WrapFormat property segítségével állíthatjuk be.
WordApp.ActiveDocument.Shapes.Item(i).WrapFormat.Type:=wdWrapSquare;
WordApp.ActiveDocument.Shapes.Item(i).WrapFormat.Side:=wdWrapLeft;
Miután a for ciklus lefutott, nem marad más hátra, minthogy elmentsük a dokumentumot, majd bezárjuk a háttérben megnyitott Word programot.
WordApp.ActiveDocument.Save;
WordApp.ActiveDocument.Close;
WordApp.Quit;