Delphi - HTML Projektkezelő komponens

HTML Help komponensek 1. rész

forráskód letöltése
Új sorozatunkban készítünk egy komponenscsomagot, amely segítségével kezelhetjük a HTML Help Workshop program által létrehozott projekteket, tartalomjegyzékeket és indexeket. A komponenscsomag segítségével Delphi-ből hozhatunk létre komplett HTML Help-eket, melyek forrása akár egy adatbázis is lehet. A sorozat első részében egy olyan komponenst készítünk, amely segítségével a HHP állományokat kezelhetjük.
A mellékelt példaprogram megnyitása előtt a HTMLHelpProject.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot. A HTMLHelpProject komponens HHC property-jében adja meg a HTML Help Workshop program elérési útját.
A HTML Help Workshop program ingyenesen letölthető az Internetről. A cikkhez a 4.47-es verziót használtuk.
A HTMLHelpProject segítségével a HTML Help Workshop által létrehozott hhp kiterjesztésű projektállományokat kezelhetjük.
A FileName property-ben kell megadnunk a megnyitandó vagy létrehozandó projektállomány elérési útját és nevét.
A létrehozott projektállomány lefordításához a HHC property-ben meg kell adnunk a HTML Help Workshop program elérési útját.
Az alábbi táblázat foglalja össze, hogy melyik property-nek melyik beállítási lehetőség feleltethető meg.
Property HTML Help Workshop opció
AutoIndex Options – Files – Include keywords from HTML files
AutoTOC Options – Files – Automatically create contents file when compiling
BinaryIndex Options – Compiler – Create binary index
BinaryTOC Options – Compiler – Create binary TOC
CompiledFile Options – Files – Compiled file
CompileFullText Options – Compiler – Compile full-text search information
ContentsFile Options – Files – Contents file
DefaultFont Options – General - Font
DefaultTopic Options – General – Default file
DefaultWindow Options – General – Default window
DisplayCompileProgress Options – Compiler – Progress
DisplayNotes Options – Compiler – Notes
EnhancedDecompilation Options – Compiler – Support enhanced decompilation
Flat Options – Compiler – Don’t include folders in compiled file
FullTextFile Options – Files – Full text search stop list file
IndexFile Options – Files – Index file
Language Options – General - Language
LogFile Options – Files – Log file
Title Options – General - Title
A Topic állományok listáját a TopicFiles property-ben állíthatjuk be, amely TStringList típusú.
Új projekt létrehozásához a CreateNewProject metódust kell meghívnunk.
procedure CreateNewProject;
A metódus beállítja ugyanazokat az alapbeállításokat, amelyeket a HTML Help Workshop program is. A projekt csak a memóriában jön létre.
A projekt elmentéséhez meg kell adnunk az elérési útját és nevét a FileName property-ben, majd meg kell hívnunk a SaveProject metódust.
function SaveProject: Boolean;
A függvény visszatérési értéke csak akkor igaz, ha a mentés sikeresen megtörtént.
Egy már létező projektet úgy tudunk betölteni, hogy a FileName property-ben megadjuk a projekt elérési útját és nevét, majd meghívjuk a LoadProject metódust.
function LoadProject: Boolean;
A függvény visszatérési értéke csak akkor igaz, ha a megadott projekt betöltése sikeresen megtörtént.
Ha a HHP állományt le akarjuk fordítani CHM állománnyá, akkor a HHC property-ben adjuk meg a HTML Help Workshop program elérési útját, majd hívjuk meg a Compile metódust.
procedure Compile;
A komponens elkészítése
Ha a Jegyzettömbbel megnyitunk egy HHP állományt, látható, hogy a felépítése olyan, mint egy INI állományé.
Ha megnyitunk egy projektet, akkor csak be kell olvasnunk a megfelelő értékeket. Ha létrehozunk egy új projektet, akkor pedig a megadott állományszerkezetet kell produkálnunk.
A projekt beállításai az OPTIONS, míg a Topic állományok a FILES szakaszban szerepelnek.
[OPTIONS]
Auto Index=No
Binary Index=Yes
Binary TOC=No
Sok olyan tulajdonság van, amelynek értéke Yes vagy No lehet. Azért, hogy komponensünk hasonló legyen a HTML Help Workshop-hoz, létrehozzuk a következő típust.
type
  TYesNo = (Yes, No);
Az alábbi táblázatban összefoglaljuk a property-ket és a hozzájuk tartozó bejegyzéseket, amelyek a HHP állományban szerepelnek.
Property Bejegyzés a HHP állományban
AutoIndex Auto Index
AutoTOC Auto TOC
BinaryIndex Binary Index
BinaryTOC Binary TOC
CompiledFile Compiled file
CompileFullText Full-text search
ContentsFile Contents file
DefaultFont Default Font
DefaultTopic Default topic
DefaultWindow Default Window
DisplayCompileProgress Display compile progress
DisplayNotes Display compile notes
EnhancedDecompilation Enhanced decompilation
Flat Flat
FullTextFile Full text search stop list file
IndexFile Index file
Language Language
LogFile Error log file
Title Title
Projekt megnyitása
A megadott projektben tárolt értékeket, a TIniFile osztály segítségével olvassuk be.
Egy érték beolvasásához használhatjuk a ReadString metódust. Az alábbi kódrészlet egy Yes/No értékű tulajdonság beolvasását mutatja be.
if IniFile.ReadString('OPTIONS','Binary Index','No')='No' then
  FBinaryIndex:=No
else
  FBinaryIndex:=Yes;
A Topic állományok beolvasásához a HHP állomány tartalmát betöltjük egy TStringList-be, ahol megkeressük a [FILES] sort. A Files sor utáni részeket betöltjük a TopicFiles property-be, egészen addig, míg egy másik szakaszba nem ütközünk.
Projekt mentése
Mentésnél a HHP állományt nem INI állományként, hanem sima TEXT állományként kezeljük. Ennek megfelelően soronként írjuk bele a megadott tulajdonságokat és Topic állományokat.
Az egyes property-kben megadott tulajdonságok elmentésénél minden értéket beírunk az állományba, még azokat is, amelyek üres sztringet tartalmaznak. Ezt azért tehetjük meg, mert fordításkor a HTML Help Workshop ezekkel a bejegyzésekkel nem foglalkozik.
Az állomány létrehozását egy TStringList típusú objektum segítségével végezzük el.
Projekt fordítása
Fordításhoz a HTML Help Workshop indítóállományának a fordítandó HHP állományt adjuk paraméterül.
ShellExecute(0,'open',PChar('"'+FHHC+'hhc.exe"'),PChar('"'+FFileName+'"'),PChar(ExtractFilePath(FFileName)),SW_HIDE);
A fordításhoz a ShellAPI unit ShellExecute utasítását hívjuk segítségül.

HTML Help komponensek cikksorozat