Möchte man aus der Hilfe heraus ein Programm starten, bieten sich dafür entsprechende Makros an. Diese Funktion kann übrigens hilfreich sein, wenn man Aufforderungen wie "Öffnen Sie die Optionen des Programms" in der Hilfe mit dem entsprechenden Programm verknüpft usw.
Die Makros werden innerhalb des Textes der RTF-Datei angegeben. Das Prinzip entspricht den Sprungmarken: man definiert einen Text, dessen Unterstreichung später den Link signalisiert, während das Makro selbst unmittelbar als unsichtbarer Text folgt. Beispielsweise:

Zu beachten ist das Ausrufungszeichen. Ohne dieses würde die Makro-Anweisung als Sprungziel gedeutet werden, was zu einer Fehlermeldung des Compilers führt. Als Anweisungen stehen zur Verfügung:
ExecFile(program[, // Programm, das gestartet werden soll
arguments[, // evtl. Kommandozeilenparameter
display-state[, // SW_SHOW, SW_HIDE o.ä.
topic-ID]]]) // kann das Programm nicht gestartet
// werden, wird das Hilfethema
// gezeigt, das der ID (= #-Fußnote) zugeordnet istShortCut(window-class, // Klassenname des Programms
program[, // Dateiname
wParam[,
lParam[,
topic-ID]]]) // Hilfethema im FehlerfallAls drittes Makro bietet sich auch "ShellExecute" an. Allerdings schreibt z.B. Dieter Bremes, in "Delphi 2 - Das Buch" (Kapitel "Hilfeprogrammierung"), dass dieses Makro z.B. nicht funktioniert, wenn man alle Parameter verwendet (und das wären insgesamt 6). Es soll nur funktionieren, wenn man lediglich die ersten drei Parameter verwendet. Aber selbst in dem Fall habe ich das Makro nicht zur Mitarbeit bewegen können.
Ich erwähne es also nur der Vollständigkeit halber und demonstriere stattdessen den Vorschlag von Dieter Bremes, wie man gleich den API-Befehl "ShellExecute" verwenden kann:
Da es ein gleichnamiges Makro gibt, kann man den API-Befehl nicht mehr direkt einbinden. Wir können stattdessen den Ansi-Namen der Funktion benutzen. Dazu klicken wir im Helpworkshop auf den Button "CONFIG" und wählen "Add ..." und schreiben:
RegisterRoutine("shell32.dll","ShellExecuteA","USSSSi")
Die so importierte Funktion lässt sich nun wie ein normales Makro verwenden, wobei natürlich die Syntax des API-Befehls zu beachten ist:
![]()
Der importierte Befehl kann nun auch zum Starten von Dokumenten und Programmen verwendet werden. Ebenso ist es aber auch möglich, gezielte Aktionen (wie "print" usw.) auszulösen, die dem System allerdings bekannt sein müssen und vom benutzten Dateityp abhängig sind.
Für die CPL-Dateien der Systemsteuerung gibt es ein eigenes Makro:
ControlPanel(CPL_name[, // Name des CPL-Moduls
panel_name, // Bezeichnung
tabnum]) // Registerkarte
Folgendes ist anzumerken: laut Hilfe des Helpworkshop muss die Bezeichnung, sofern man sie nutzt, der Symbolunterschrift des Moduls entsprechen, also beispielsweise:

Um das Modul "Anzeige" zu starten, müsste demnach das Makro wie folgt aussehen:
!ControlPanel(desk.cpl,Anzeige,2)
Und das dürfte spätestens auf anderssprachigen Versionen von Windows nicht mehr funktionieren. Aber interessanterweise klappt der Aufruf des CPL-Moduls auch ohne die Bezeichnung problemlos:
!ControlPanel(desk.cpl,,2)