## Spis treści

Uważniejszy webmaster na pewno już sobie poradził z konstrukcją strony, zerkając po prostu do jej źródła i wyciągając plik spisu treści z cache'a przeglądarki. Dla lepszego zobrazowania problemu posłużmy się przykładem tego dodatku.

Autorom wykorzystującym HTML Help ActiveX sugeruję posługiwanie się kompilatorem HTML Help Workshop, gdyż po prostu łatwiej jest ustalić niektóre parametry spisu treści, choć praca z Workshopem potrafi być niekiedy mocno stresująca, na skutek jego rozmaitych niedoróbek.

Podstawą konstrukcji tej strony jest oczywiście układ ramek:

    <frameset rows="100%" cols="27%,*" frameborder="no">
    	<frame name="left" src="spis.htm" scrolling="auto">
    	<frame name="right" src="wstep.htm" scrolling="auto">
    </frameset>

Lewa ramka nazywa się "left", zaś prawa - "right". Nazwy są istotne dla spisu treści.

W lewej ramce, w ramach BODY, umieszczone jest polecenie OBJECT, które wywołuje HTML Help ActiveX:

    <OBJECT id=hhctrl type="application/x-oleobject"
            classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"
            codebase="hhctrl.ocx#Version=4,73,8561,0"
            width=100%
            height=90%
    >
        <PARAM name="Command" value="Contents">
        <PARAM name="Item1" value="kurshtml.hhc">
        <PARAM name="Flags" value="0x0,0x17">
    </OBJECT>

Uwaga: u niektórych użytkowników może się pojawić konflikt między posiadaną w komputerze i zadeklarowaną wersją hhctrl.ocx. Aby jej uniknąć, możemy podawać w poleceniu codebase

`CODEBASE="http://activex.microsoft.com/controls/htmlhelp/hhctrl.ocx"`

Wartość Contents informuje, że polecenie dotyczy spisu treści, który jest reprezentowany w tym miejscu przez odrębny plik kurshtml.hhc. Wartości width i height mówią, jaki procent ekranu (w ramce, rzecz jasna) zajmuje spis, a właściwie cały obiekt. Wartości Flags są ustalane w trakcie tworzenia spisu w HTML Help Workshop - trudno je ustalać ręcznie, stąd właśnie lepsze jest użycie kompilatora. Ja sam przyjąłem, że spis ma białe tło i jest rozwijany m.in. za pomocą kratek z plusami. Tło tej strony także jest białe, wskutek czego spis wtapia się w stronę.

Przytoczmy teraz postać pliku ze spisem, czyli kurshtml.hhc, wygenerowanego przez HTML Help Workshop. Jest to oczywiście plik tekstowy HTML. Dla uproszczenia zostawiamy tylko po jednej pozycji na rozmaitych poziomach tego spisu.

    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
    <HTML>
    <HEAD>
    <meta name="GENERATOR" content="Microsoft® HTML Help Workshop 4.1">
    <!-- Sitemap 1.0 -->
    </HEAD><BODY>
    <OBJECT type="text/site properties">
    	<param name="FrameName" value="right">
    	<param name="Window Styles" value="0x5">
    	<param name="ImageType" value="Folder">
    </OBJECT>
    <UL>
    	<LI> <OBJECT type="text/sitemap">
    		<param name="Name" value="Wstęp">
    		<param name="Local" value="wstep.htm">
    		<param name="FrameName" value="right">
    		<param name="ImageNumber" value="17">
    		</OBJECT>
    	<LI> <OBJECT type="text/sitemap">
    		<param name="Name" value="HTML">
    		<param name="FrameName" value="right">
    		</OBJECT>
    	<UL>
    		<LI> <OBJECT type="text/sitemap">
    			<param name="Name" value="HTML dla bardzo początkujących">
    			<param name="Local" value="..\beginner\beginner.htm">
    			<param name="FrameName" value="right">
    			<param name="ImageNumber" value="11">
    			</OBJECT>
    	</UL>
    	<LI> <OBJECT type="text/sitemap">
    		<param name="Name" value="Lupus Online">
    		</OBJECT>
    	<UL>
    		<LI> <OBJECT type="text/sitemap">
    			<param name="Name" value="PCkurier">
    			<param name="Local" value="http://www.pckurier.pl">
    			<param name="FrameName" value="right">
    			<param name="ImageNumber" value="13">
    			</OBJECT>
    	</UL>
    	<LI> <OBJECT type="text/sitemap">
    		<param name="Name" value="Wyszukiwarki internetowe">
    		</OBJECT>
    	<UL>
    		<LI> <OBJECT type="text/sitemap">
    			<param name="Name" value="Infoseek PL">
    			<param name="Local" value="http://infoseek.icm.edu.pl">
    			<param name="FrameName" value="right">
    			<param name="ImageNumber" value="13">
    			</OBJECT>
    	</UL>
    	<LI> <OBJECT type="text/sitemap">
    		<param name="Name" value="Serwisy z oprogramowaniem">
    		</OBJECT>
    	<UL>
    		<LI> <OBJECT type="text/sitemap">
    			<param name="Name" value="SlaughterHouse">
    			<param name="Local" value="http://slaughterhouse.com">
    			<param name="FrameName" value="right">
    			<param name="ImageNumber" value="13">
    			</OBJECT>
    	</UL>
    </UL>
    </BODY></HTML>

Jak łatwo zauważyć, spis składa się z dwupoziomowego wykazu typu UL, w którym wyższy poziom pełni funkcję folderu dla niższego, czyli odsyłaczy do konkretnych stron. Podany przykład można skopiować i przystosować do własnych potrzeb, rozwijając o dalsze odsyłacze. Dla ułatwienia, tutaj jest zzipowana wersja spisu - hhc.zip

Polecenie `<param name="FrameName" value="right">` mówi o skierowaniu zawartości do prawej ramki (right), właśnie tej, którą określiliśmy w układzie ramek dla całej strony.

Polecenie `<param name="ImageNumber" value="13">` informuje, jakie ikonki są przypisane do poszczególnych adresów: do dyspozycji mamy "auto" i numery od 1 do 42. Na przykład, value=13 generuje ikonkę strony w Internecie, value=17 - ikonkę ze znakiem informacji.

HTML Help Workshop generuje wartości adresów lokalnych z backslashami, choć działają obie wersje.

Ta właśnie definicja jest przywoływana do lewej ramki, podanym wyżej poleceniem OBJECT. Obsługuje ją kontrolka ActiveX, wbudowując ją w stronę HTML.

Oczywiście nic nie stoi na przeszkodzie, aby tego rodzaju spis umieszczać nie w układzie ramkowym, lecz na pojedynczych stronach.