ALinks


Ein ALink lässt sich grob betrachtet mit einem typischen Dateilink vergleichen. Nur, und das ist der Unterschied: Sie müssen den Dateinamen und den -pfad nicht wissen. Das hört sich komplizierter an, als es tatsächlich ist. Nehmen wir als Beispiel an, dass Sie eine mehrseitige Dokumentation geschrieben und als CHM-Hilfedatei veröffentlicht haben. Nun fügen Sie im Rahmen eines Updates oder einer Korrektur ein paar neue Seiten ein. Um die Struktur oder Reihenfolge der Seiten beizubehalten, benennen Sie sie um.
Und spätestens jetzt müssen Sie natürlich auch die Links in Ihren Seiten kontrollieren, da es (durch die Umbenennung) durchaus vorkommen könnte, dass ein Dateiname benutzt wird, der überhaupt nicht mehr existiert, bzw. der auf die falsche Datei verweist.

Bei ALinks ist das nicht erforderlich, da diese ja in den HTML-Seiten selbst stecken. Wie auch immer die Datei letztlich heißt, wenn Sie die ALinks nicht umbenennen, spielt es keine Rolle, in welcher Datei sie sich befinden. Wenn Sie den selben Begriff mehrfach benutzen, dann erscheint (wie bei den KLinks) eine Auswahlliste mit allen gefundenen Themen. Und auch die Vorgehensweise beim Erstellen eines ALink entspricht dem schon bekannten KLink-Prinzip:

Laden Sie bitte eine HTML-Seite mit dem HTML Helpworkshop und setzen Sie den Cursor an die Stelle des Codes, an der Sie den ALink einfügen wollen. Wählen Sie dann im Menü "Edit/Compiler Information ..." aus und wechseln Sie im Dialog auf die Registerseite "ALink Names". Tragen Sie nun die Worte ein, die Sie als ALinks verwenden wollen. Mehrere geben Sie durch Semikolon getrennt an.
Der HTML Helpworkshop fügt dann z.B. folgenden Code ein:

<object type="application/x-oleobject"
  classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
    <param name="ALink Name" value="HelpFiles_Intro">
</object>

ALinks aufrufen

Zum Aufruf eines ALinks laden Sie die gewünschte HTML-Seite im HHW und positionieren den Cursor an der gewünschten Stelle im Code. Klicken Sie nun wieder auf den "HTML Help ActiveX Control"-Button in der Toolbar und wählen Sie "ALink Search" aus der oberen Liste aus. Die untere Eingabezeile enthält einen eindeutigen Namen für das Control. Wenn Sie mehrere verwenden wollen oder müssen, muss jedes Control einen eigenen und eindeutigen Namen haben.

Im nächsten Schritt können Sie auswählen, ob das Control als Button erscheinen oder unsichtbar sein soll. Wenn Sie einen Button als Control gewählt haben, können Sie im nächsten Schritt dessen Gestaltung ändern.

Für das Beispiel habe ich mich für ein verstecktes Control entschieden, so dass der HHW folgenden Code in die HTML-Seite einfügt:

<object id="alnk" type="application/x-oleobject"
  classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"
  codebase="hhctrl.ocx#Version=5,2,3669,0">
    <PARAM name="Command" value="ALink">
    <PARAM name="Item1" value="">
    <PARAM name="Item2" value="ALinkTest">
</object>

Mit einem JavaScript-Link lösen wir dann quasi einen Klick auf das Control aus:

<a href="javascript:alnk.Click();">ALink-Test</a>

Wie bei den KLinks lässt sich auch hier eine Fehlerseite definieren, die angezeigt wird, wenn der Begriff nicht gefunden wurde:

    <PARAM name="DefaultTopic" value="../../notopic.htm">


ALink und "merged CHMs"

Das eigentliche Potential ist, dass es letzten Endes unerheblich ist, in welcher Hilfedatei sich ein solcher ALink befindet. Es sind also auch Cross-Links zu anderen Modulen möglich. Dass die Hilfedatei selbst in irgendeiner Form bekannt sein muss, versteht sich natürlich. Da es aber bei einer Zusammenfassung (s. auch hier) immer eine so genannte Master-Datei gibt, die die Referenzen auf alle benötigten Hilfedateien enthält, kann man diese Anforderung bereits als gegeben ansehen.

Doch zuerst ein Schritt zurück -

Wenn Sie dieses Tutorial ("HelpFiles.chm") für sich allein ausführen, dann sollte der Klick auf obigen Link zum Anfang des Tutorials springen. (Sinn hin oder her, es geht ja nur um die Demonstration ...)

Ist dieses Tutorial nun Teil einer Sammlung, und Sie klicken auf den Link, kann es (ohne spezielle Vorbereitung) passieren, dass eine Fehlermeldung erscheint. Dieser Fehler ist im Artikel 267948 der Knowledge Base von Microsoft beschrieben. Um die Lösung vorwegzunehmen:

Die Master-Datei, die die einzelnen Hilfedateien zusammenfasst, benötigt selbst min. einen ALink-Eintrag. Ob Sie ihn nun verwenden oder nicht, spielt dabei keine Rolle. Ohne ihn werden die ALinks der anderen Hilfedateien nicht berücksichtigt, und es kommt zum erwähnten Fehler.


Die Lösungsschritte noch mal zusammengefasst:

  1. Um sonstige Fehler auszuschließen, sollten Sie grundsätzlich die Schreibweise prüfen. Sowohl in den Seiten, in denen (wie hier) ALinks definiert werden, als auch in den Seiten, in denen nach diesen ALinks gesucht wird.
  2. Im Gegensatz zum Vorschlag der Knowledge Base müssen Sie nicht zwangsläufig die HTML-Seite öffnen, die das o.g. Control zur Suche nach ALinks enthält. Es genügt auch eine beliebige andere HTML-Seite der Master-Datei.
  3. Platzieren Sie den Cursor innerhalb der body-Tags und fügen Sie über das Menü "Edit/Compiler Information ..." einen neuen ALink-Namen ein. Es ist unerheblich ob Sie den Namen nutzen wollen oder nicht. Wichtig ist nur, dass min. ein ALink in einer beliebigen HTML-Seite der Master-Datei vorkommt.
  4. Prüfen Sie zur Sicherheit in den Projektoptionen, dass die benötigten externen Hilfedateien auf der Registerseite "Merge Files" angegeben wurden. (Mehr Informationen finden Sie hier.)
  5. Kompilieren Sie die Master-Datei neu! Kompilieren Sie ggf. auch die Hilfedateien neu, die in irgendeiner Form ALinks enthalten oder darauf zugreifen.

Auf diese Weise sollten nun die datei-internen ALinks wieder funktionieren. Aber auch Links zu externen Hilfeseiten sind nun möglich.