WinHelpMakros

Nettes kleines Blindtext-Makro

Es mag vorkommen, dass jmd. mit Word sein Seitenlayout testen will und dafür einige Zeilen oder sogar Seiten Blindtext benötigt. Im Februar 2004 habe ich von einem kleinen internen Word-Befehl Kenntnis erhalten, mit dem sich sozusagen beliebig viel Blindtext mit ganz wenigen Zeichen eingeben lässt:

Öffne ein neues Dokument oder positioniere den Cursor irgendwo im bestehenden Testdokument.
Gib Folgendes ein

=Rand(x,y) 

wobei x und y durch Zahlen (x für Anzahl Absätze und y für Anzahl der Satzwiederholungen) zu ersetzen sind. Mit leeren Klammern werden die Defaultwerte (3,3) angenommen. Das "R" ist zwingend groß zu schreiben.
Gib dann RETURN ein, soll heißen drück die RETURN-Taste, um den internen Befehl auszuführen. Ich habe dieses "Gimmick" mit Word 2000 unter Windows 2000 und Word 2003 unter Windows XP erfolgreich getestet.

Verknüpfungen auf Felder

Es kann vorkommen, dass innerhalb eines Word-Dokuments der Inhalt eines dynamisch erzeugten Feldes mehrfach an diversen Stellen ausgegeben werden soll. Zum Beispiel fügt jmd. einen Namen an eine bestimmte Position ein, und Word soll diesen Namen automatisch an anderen Stellen wiedergeben.
Dies lässt sich folgendermaßen bewerkstelligen:

  1. Formularfeld erstellen, um den Namen erstmalig aufzunehmen.
  2. In den Eigenschaften zu diesem Feld muss "Beim Verlassen berechnen" markiert sein. Benenne das Formularfeld mit einer sinnvollen "Textmarke".
  3. An den gewünschten weiteren Positionen füge mit Strg+F9 geschweifte Klammern für Feldfunktionen ein. Gib "REF Textmarkenname" innerhalb der Klammern ein.

Durch die Berechnungsfunktion werden die Felder unmittelbar gefüllt.

Sprünge zu Web-Seiten oder E-Mail-Aufrufe in der HILFE.HLP

... funktionieren, wenn der Aufruf über ein Execute-Makro erfolgt. Im RTF-Dokument sieht der Code ähnlich Folgendem aus:

WWW-Seite!ExecFile("http://www.cabeweb.de/index.htm") von C.Behrens
Mail!ExecFile("mailto:user@domain.de") an User

Hierbei steht durchgestrichen für doppelt unterstrichen und das Dunkelblaue für hidden Text. Unter Windows wird im ersten Falle der Standard-Browser (z.B. Internet Explorer) aufgerufen und die angegebene Seite direkt geöffnet. Bei Makros, die eine Mail versenden sollen, wird (unter meinen Betriebssystem-Bedingungen) Outlook Express aufgerufen, bzw. weil es noch gar nicht konfiguriert war, ein Wizard zur Installation desselben. Nach Installation über diesen Wizard funktionierte der Link aber tadellos.

Meine (Word-)Makros in der HILFE.DOT

... funktionieren nur, wenn der Mauszeiger am Anfang einer Zeile steht und nichts markiert ist.

Schaltflächen im Hilfefenster mit Funktionen belegen

Wie kann man Schaltflächen im Hilfefenster mit Funktionen belegen? Siehe dazu folgende Zeile aus dem Abschnitt [Config] in der HPJ-Datei. Durch diese Zeile wird eine Schaltfläche mit der Aufschrift "MULTI-TE" erzeugt und eingefügt. Ein Klick darauf verzweigt in die Hilfedatei "termemu.hlp" mit dem Abschnitt "ctx_topic_main" (d.h. # Fußnote im RTF-Code):

CreateButton("btn_1", "MULTI-TE", "JumpID(`termemu.hlp',`ctx_topic_main')"

oder auch folgende Zeile, um direkt die E-Mail-Funktion aufzurufen:

CB("btn_mail", "E-Mail...", "ExecFile(`mailto:user@domain.de')")

Nur für Windows 9x/NT, d.h. mit dem Hilfecompiler HCW! Ein Klick auf die Schaltfläche "PSP4.12" führt das Makro "ExecFile" aus. Im konkreten Fall wird das Programm "psp.exe" aus dem Verzeichnis "util" gestartet.

CreateButton("btn_2", "PSP4.12", "ExecFile(util/psp.exe)")

Für Windows 3.1x, d.h. mit dem Hilfecompiler HCP! Ein Klick auf die Schaltfläche "PSP3.11" führt das Makro "ExecProgram" aus. Im konkreten Fall wird das Programm "psp.exe" gestartet, welches sich im selben Verzeichnis wie die aktuelle Hilfe-Datei befinden muss.

CreateButton("btn_3", "PSP3.11", "ExecProgram(`psp.exe', 0)")

Einbau von eigenen Menüs und Menübefehlen in das Hilfefenster

Das Hilfefenster lässt sich auf eigene Bedürfnisse leicht zurechtschneiden. Neben der Integration eigener Schaltflächen kann man auch Menüs erzeugen, die nur im Hauptfenster sichtbar sind. Dazu wird im Abschnitt [CONFIG] Folgendes eingebaut:
Erzeugen eines Menüs ("Kontakt"), das an 5. Stelle der Menüs eingefügt werden soll, da die letzte Stelle dem "?" für Hilfe vorbehalten bleiben muss:

InsertMenu("mnu_contact",    "&Kontakt", 4)

Erzeugen eines Menübefehls ("E-Mail..."), der an der 1. Stelle des Menüs "Kontakt" eingefügt werden soll (Hinweis: Code bitte ohne Zeilenumbruch eingeben):

InsertItem("mnu_contact", "itm_mail", "E-Mail...", 
"ExecFile(`mailto:user@domain.de')", 0)

Erzeugen eines weiteren Menübefehls ("Ansprechpartner"), der an der 2. Stelle des Menüs "Kontakt" eingefügt werden soll. Das hinterlegte Makro "JI" führt einen JumpItem, also einen Sprung auf ein vorhandenes Topic "CHP_Ansprechpartner" der aktuellen Hilfedatei (die hier nicht angegeben ist, also einem Leerstring `' entspricht) aus (Hinweis: Code bitte ohne Zeilenumbruch eingeben):

InsertItem("mnu_contact", "itm_contact", "Ansprechpartner", 
"JI(`', `CHP_Ansprechpartner')", 1)

Aufruf von Makros direkt aus dem Hilfetext

Makros lassen sich auch aus dem Hilfetext heraus (also nicht nur über die Schaltflächen) starten. Das durchgestrichene Wort "Suchfunktion" entspricht einem doppelt unterstrichenen, also mit einem Sprung versehenen. Unmittelbar dahinter wird "!Search()" eingefügt und als hidden (hier: blau) markiert. Ein Klick auf das Wort führt das Makro Search() aus, welches die Suchfunktion der aktuellen Hilfe startet:

"Mit diesem Menübefehl verzweigen Sie direkt in die Suchfunktion!Search() der Online-Hilfe."

Zusammenarbeit mit dem Software-Entwickler

Für die Erstellung kontextsensitiver Hilfen stellt der Software-Entwickler (mindestens) eine Datei mit den Hilfe-IDs zur Verfügung. Unter 32-Bit Windows zeigt diese Datei ein Aussehen ähnlich dem folgenden Beispiel:

#define HIDC_DEFAULT 0x806b03f7 // IDD_PAGE_MENU
#define HIDC_DISABLE 0x806b03f1 // IDD_PAGE_MENU
#define HIDC_EMUFKTLIST 0x80710402 // IDD_PAGE_EMU_GENERAL
#define HIDC_ENABLE 0x806b03f2 // IDD_PAGE_MENU

oder auch (ohne #define)

HID_DIRECTHELP 0x105DC
HIDR_MAINFRAME 0x20080
HIDD_ABOUTBOX 0x20064

Die Zuordnung dieser Zeichenketten (die Hexadezimaladressen interessieren uns nur am Rande) gestaltet sich manchmal schwierig, weil nicht leicht zu erkennen ist, welcher Dialog oder welche Schaltfläche diese ID (Zeichenkette) ausgelöst hat. Jedenfalls bauen TRs den Hilfetext in das Word-RTF-Dokument ein und versehen diesen Hilfe-Topic mit der #-Fußnote, die exakt die Zeichenkette des Entwicklers wiedergibt. (Achtung! Mein Makro "Fußnote" fügt erst mal "ctx_" ein. Das muss natürlich überschrieben werden!)

Last modified: 24.09.2017