Formatierte Hilfeseiten erstellen

By , 16. April 2011

Es mag oft eine lästige Arbeit sein am Ende eines Projektes oder mitten drin ein Hilfesystem zu implementieren.
Für einfache Anwendungen genügt auch meist 1 Hilfeseite pro Formular. Ich bin dabei auf eine verblüffend einfache Methode gestoßen:
Man erstelle ein neues Formular, und plaziere darauf genau 1 Steuerelement, nämlich das ActiveX Webbrowser Control. Vor dem Speichern des Formulares das Steuerelement in die Ausgangsgröße positionieren, weil spätere Änderungen nicht möglich sind. Am besten man wähle ein möglichst großes Format, das aber noch auf allen Bildschirmen im ganzen sichtbar sind.
Der Name des Controls sei jetzt „Webbrowser1″.

Die weitere Vorgehensweise ist die folgende:
1. Man erstellt man die gewünschte Hilfeseite mit einem HTML-Editor seiner Wahl.
2. Kopiert den Quelltext und überträgt diesen in das Formularmodul in eine neue Prozedur.
3. Der eingefügte HTML-Quelltext wird bearbeitet, alle Anführungszeichen müssen ersetzt werden (Copy/Paste) durch die folgende Zeichenfolge: “ & chr(34) & “
4. Jede einzelne Zeile wird wie folgt eingeschlossen: Print #1, „Hier kommt die Quelltextzeile“

Ich verwende für die einzelne Hilfeseiten Prozeduren die fortlaufend nummeriert sind, also z.B. Public Sub help1():

Public Sub help1()
Open CurrentProject.Path & "/index.html" For Output As #1
Print #1, "<!DOCTYPE html PUBLIC " & Chr(34) & "-//W3C//DTD XHTML 1.0 Transitional//EN" & Chr(34) & " " & Chr(34) & "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" & Chr(34) & ">"
Print #1, "<html xmlns=" & Chr(34) & "http://www.w3.org/1999/xhtml" & Chr(34) & ">"
Print #1, "<head>"
Print #1, "<style type=" & Chr(34) & "text/css" & Chr(34) & ">"
Print #1, "    body{background:#fff;color:#000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;font-style:normal;font-weight:400;margin:5;width:95%}"
Print #1, "    dl{margin-top:0;padding-left:1px}"
Print #1, "    dd p{margin-left:0;margin-top:0;padding-right:20px}"
Print #1, "</style>"
Print #1, "Verbindung mit Server herstellen (Datenbankmodul)"
Print #1, "<title>Verbindung mit Server herstellen (Datenbankmodul)"
Print #1, "</head>"
Print #1, "<body>"
Print #1, "<div style=" & Chr(34) & "margin:5px;width:100%" & Chr(34) & ">"
Print #1, "<div style=" & Chr(34) & "margin-bottom: 20px" & Chr(34) & "><b><font size=" & Chr(34) & "+1" & Chr(34) & ">Verbindung mit Server herstellen (Datenbankmodul)</font></b></div>"Print #1, "<div><p>Verwenden Sie dieses Dialogfeld, um Optionen für Verbindungen zu Computern mit MicrosoftSQL Server Database Engine (Datenbankmodul) anzuzeigen oder anzugeben. In den meisten Fällen können Sie eine Verbindung herstellen, indem Sie im Feld <b>Servername</b> den Computernamen des Datenbankservers eingeben, und dann auf <b>Verbinden</b> klicken. Verwenden Sie beim Herstellen der Verbindung mit SQL Server Express den Computernamen gefolgt von <b>\sqlexpress</b>.</p><p>Viele Faktoren können Auswirkungen auf die Möglichkeit zum Herstellen der Verbindung mit SQL Server haben. Ein kurzes Lernprogramm zum Herstellen der Verbindung mit SQL Server finden Sie unter <span><a id=" & Chr(34) & "ctl00_MainContent_ctl01" & Chr(34) & " href=" & Chr(34) & "http://....." & Chr(34) & " onclick=" & Chr(34) & "javascript:Track('ctl00_MainContent_ctl00|ctl00_MainContent_ctl01',this);" & Chr(34) & ">Lernprogramm: Erste Schritte mit dem Datenbankmodul</a></span>.</p></div>"
Print #1, "<span>"
Print #1, "<div><b><font size=" & Chr(34) & "2" & Chr(34) & ">Optionen:</font></b></div>"
Print #1, "<div style=" & Chr(34) & "display:block;" & Chr(34) & " >"
...... usw.
Print #1, "</body>"
Print #1, "</html>"
Close #1
Me!WebBrowser1.Navigate CurrentProject.Path & "/index.html"
End Sub


Die Steuerung erfolgt im Form_Load Ereignis wie nachfolgendes Listing zeigt. Das Listing verdeutlich warum die obige Prozedur Public deklariert sein muss, dies erfordert der Aufruf durch die Funktion CallByName.

Private Sub Form_Load()
    If IsNull(Me.OpenArgs) Then
        help1
    Else
        CallByName Me, "help" & Me.OpenArgs, VbMethod
    End If
    Me!WebBrowser1.Navigate CurrentProject.Path & "/index.html"
End Sub

Der Aufruf der Hilfeseite aus anderen Formularen erfolgt z.B. mit einem Button:

Private Sub help_Click()
    DoCmd.OpenForm "frmHelp", , , , , , 1
End Sub

Nun man möge sich fragen warum macht man die Mühe und speichert den HTML-Quellcode im Access Code. Es mach zuerst aufwendiger aussehen, doch auch bei einem „normalen“ Hilfesystem erstellt man zuerst einzelne Hilfe-Webseiten. Das einfügen nach Access ist ein einfaches Copy und Paste. Auch das Bearbeiten der Anführungszeichen ist ein einfaches Ersetzen vom Markiertem Text, also auch nur wenige Sekunden Arbeit. Der ganz große Vorteil aber kommt dann zum tragen wenn Sie ein Projekt weitergeben. Dann müssen mehrere Dateien weitergegeben werden, die in das richtige Verzeichnis kopiert werden etc. Und wenn der Kunde mal das Frontend irgend wo anderst hin kopiert funktioniert es nicht mehr. Diese Fehlerquelle schaltet man dadurch aus indem man die HTML-Dateien als Quelltext im Programm speichert. eine Alternative wäre auch die Speicherung in einer Backend-Tabelle.

Ich würde diese Methode auch nicht bei einer sehr umfassenden und kontextsensitiven Hilfe umsetzen, sondern wenn man wenige erklärende Hilfeseiten benötigt.

Anbei eine Grafik die das Hilfeformular zeigt das aus obigem Code erstellt wurde:

Formatierte_Hilfeseite

Bis dahin
Andreas Vogt ©2011

Leave a Reply

You must be logged in to post a comment.

OfficeFolders theme by Themocracy