Anpassen der F1-Hilfe in VCL-Anwendungen
Nach oben zu Aufrufen von HTML-Hilfe aus Anwendungen
Entwickler können die OnHelp-Ereignisbehandlungsroutinen des Application-Objekts und einzelner Formulare explizit programmieren.
Öffnen Sie zum Ändern der Ereignisbehandlungsroutine OnHelp eines Formulars den Formular-Designer.
Wählen Sie dann im Objektinspektor die Registerkarte Ereignisse aus, suchen Sie das Ereignis OnHelp, und doppelklicken Sie in die rechte Spalte. Der Quelltext-Editor öffnet die Datei mit dem Code zur Formularbehandlung, und der Cursor befindet sich im begin … end-Block des erzeugten Rahmencodes für die Ereignisbehandlungsroutine OnHelp. Der generierte Code kann wie folgt aussehen:
function TForm1.FormHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean; begin ... end;
Hier können Sie Ihren Code für die Hilfebehandlung eingeben. Weil die Ereignisbehandlungsroutine TForm1.FormHelp
die Methode des Form1-Objekts der Klasse TForm1 ist, können Sie alle Hilfefunktionen der Objekte Form1 und Application verwenden. Sie könnten beispielsweise folgenden Code schreiben:
function TForm1.FormHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean; begin HelpFile := ExtractFilePath(Application.ExeName) + HelpFile; Application.HelpShowTableOfContents(); CallHelp := False; // True; - to execute the default OnHelp event handler end;
Hier wird in der ersten Zeile bei der Neudefinition von HelpFile
davon ausgegangen, dass die Ausgangs-HelpFile
einen relativen Pfad von der ausführbaren Datei der Anwendung zur lokalen Hilfedatei für das Formular Form1 enthält. Diese Neudefinition stellt sicher, dass diese Hilfedatei immer von der ausgeführten Anwendung gefunden werden kann.
Application.HelpShowTableOfContents
zeigt das Inhaltsverzeichnis der in TForm1.HelpFile
für das Formular Form1 definierten CHM-Hilfedatei an.
Durch Setzen von CallHelp
auf False
wird festgelegt, dass die Standard-Ereignisbehandlungsroutine OnHelp nicht ausgeführt wird. Wenn die Standard-Ereignisbehandlungsroutine OnHelp nach Ihrer manuell programmierten Ereignisbehandlungsroutine ausgeführt werden soll, dann müssen Sie Folgendes definieren:
CallHelp := True;
- Hinweis: Sie können Application.HelpCommand nicht in Ihrem Code für die OnHelp-Ereignisbehandlungsroutine verwenden.
Application.HelpCommand(NativeCommand, Data)
- Mit dem obigen Befehl übergeben Sie die NativeCommand-Optionen an die native API-Funktion HTMLHelp (oder an eine andere native API). Die Funktion Application.HelpCommand löst das Ereignis OnHelp für das aktive Formular aus. Daher führt der Aufruf der Funktion HelpCommand in der Ereignisbehandlungsroutine OnHelp im Ereignis OnHelp zu einer Endlosschleife.
- Sie sollten daher zur Übergabe der NativeCommand-Optionen an die API-Funktion HTMLHelp Folgendes aufrufen:
IHelpSystem.GetHelpSystem(HelpSystem)
- Und dann:
HelpSystem.Hook(Handle, HelpFile, NativeCommand, Data);