
A mellékelt példaprogram futtatása előtt, a forráskódhoz mellékelt Doc könyvtárat helyezze el a C meghajtó főkönyvtárában, vagy állítsa be annak elérési útját, az IWUnit1.pas forráskód 36. sorában található DIR konstansban.
Nem magyar nyelvű Word használata esetén módosítania kell a tartalomjegyzék stílusnevet az adott nyelvnek megfelelően, a Unit1.pas forráskód 83. sorától kezdődően.
A feladat megvalósítását az IntraWeb segítségével végezzük el. Egy új IntraWeb-es alkalmazás készítéséhez válasszuk a File – New – Other menüpontot, majd az IntraWeb paletta Stand Alone Application elemét. Megjelenik egy új ablak, ahol adjuk meg alkalmazásunk könyvtárát, majd kattintsunk az OK feliratú gombra.
A háttérben szükségünk lesz a Word programra. Az alkalmazás alapbeállításai szerint nem használhatunk COM objektumokat. Ennek a problémának a kiküszöböléséhez válasszuk ki a Form-ok közül az IWServerController objektumot. A ComInitialization property-jének értékét módosítsuk ciNormal-ra. Ezáltal használhatóvá válnak a COM objektumok és nem okoznak hibaüzenetet.
Web-es alkalmazásunk első oldalát a formMain objektumon készíthetjük el. Ezen a Form-on a Dir könyvtár tartalmát jelenítjük meg. Kilistázzuk a Doc és az Rtf kiterjesztésű állományokat.
A DIR konstansban beállított könyvtár tartalmában a FindFirst – FindNext (SysUtils unit) utasításpáros segítségével keressük meg a Word dokumentumokat. A megtalált állományok nevét link formájában jelenítjük meg, a TIWLink osztály segítségével. Az egyes címkék létrehozásáról nekünk kell gondoskodnunk, dinamikus módon.
l:=TIWLink.Create(Self);
with l do begin
Left:=20;
Top:=NextRow;
...
A TIWLink osztály OnClick eseményében programozhatjuk le, hogy mi történjen akkor, ha a felhasználó az adott linkre kattint. Ezt az IWLinkClick eljárásban kezeljük le.
Ilyenkor megnyitunk egy új ablakot, amelyben megjelenítjük az adott dokumentum tartalomjegyzékét.
formMain1:=TformMain1.Create(WebApplication);
formMain1.ReadContext(DIR+(Sender as TIWLink).Caption);
formMain1.Show;
Az új ablakhoz készítünk egy ReadContext nevű függvényt, amelynek paraméterként a megnyitandó Word dokumentum elérési útját és nevét kell megadnunk.
Egy újabb IntraWeb-es Form létrehozásához válasszuk a File – New – Other menüpontot, majd az IntraWeb fül Application Form elemét.
Ellentétben a hagyományos Delphi alkalmazásokkal, az IntraWeb-es Form-okhoz nem létezik példányváltozó, nekünk kell őket létrehoznunk, dinamikusan.
A ReadContext metódus hajtja végre a tartalomjegyzék megnyitását.
procedure TformMain1.ReadContext(WFile: String);
Hasonlóan az előző ablakhoz, a tartalomjegyzék bejegyzéseit dinamikusan készítjük el, ezúttal azonban TIWLabel komponenseket használunk.
A uses listát itt is bővítenünk kell a SysUtils és a ComObj unit-okkal.
A háttérben megnyitjuk a Word programot.
WordApp:=CreateOleObject('Word.Application');
Megnyitjuk a megadott állományt.
WordApp.Documents.Open(WFile);
Beolvassuk az állományban szereplő tartalomjegyzékeket.
Contents:=WordApp.ActiveDocument.TablesOfContents;
Egy dokumentumban több tartalomjegyzék objektum is lehet, ezeket végig kell néznünk. A TablesOfContents egy kollekció, melynek egy elemét az alábbi módon érhetjük el.
Cont:=Contents.Item(1).Range;
Hasonlóan más Word dokumentum részekhez, a tartalomjegyzékek is bekezdésekből állnak. Minden bejegyzés külön bekezdésben található.
while i<Cont.Paragraphs.Count do begin
ContentItem:=Cont.Paragraphs.Item(i);
A ContentItem.Range.Text értékből kiolvashatjuk a tartalomjegyzék egy sorát. Ez egyaránt tartalmazza a címet és a hozzá tartozó oldalszámot is. Ezeket külön változókba kell elhelyeznünk (Page és Title).
A tartalomjegyzék egyes sorai különböző stílusúak lehetnek. A mellékelt példában 5 különböző szint használatát tesszük lehetővé. Az egyes szinteknek megfelelően állítjuk be az adott címet megjelenítő TIWLabel Left property-jének értékét.
A címet és az oldalszámot külön objektum segítségével jelenítjük meg.
A művelet végén bezárjuk a Word programot.