MessageBox deluxe

Letzte Änderung am 8. November 2023 by Christoph Jüngling

Es war einmal …

So fangen viele Märchen an, und manchmal auch solche, die einst Wirklichkeit waren. Nun ist eine Wirklichkeit, die zum Märchen wurde, erneut Wirklichkeit geworden: Die (von mir so bezeichnete) MsgBox deluxe.

Sie ist wieder da!

Es gibt sie wieder, die MessageBox, die den Fettdruck in der ersten Zeile und auch ein paar Leerzeilen kennt. Dadurch lassen sich Meldungen an den User etwas besser strukturieren und sind dadurch hoffentlich auch besser verständlich. Wie ich in diesem Artikel dargestellt habe, sollte eine Fehlermeldung nicht nur den Grund und vielleicht eine Erläuterung enthalten, sondern auch technische Daten für den Ort des Fehlers. Um diese MessageBox (wieder) besser darzustellen, ist mir jetzt eine Lösung in die Hände gefallen.

Alternative MessageBox mit 3 Absätzen, von denen der erste fett gedruckt ist.

Alternative MessageBox

Es war Andrè Minhorst, der in seinem YouTube-Kanal diesen Tipp veröffentlicht hat.

Hilfsfunktion

Die Umsetzung ist nicht besonders schwierig, aber ich will das trotzdem nicht jedes mal eingeben müssen, wenn ich eine MsgBox benötige. Daher habe ich mir eine kleine Hilfsfunktion gebaut, die ich MsgBox2 genannt habe (der Name ist natürlich beliebig wählbar).

Public Function MsgBox2( _
    Prompt As String, _
    Optional Buttons As VbMsgBoxStyle = vbOKOnly + vbInformation, _
    Optional Title As String = "", _
    Optional HelpFile As String = "Message", _
    Optional HelpContext As Long = 0, _
    Optional Prompt2 As String = "", _
    Optional Prompt3 As String = "") As Long

Dim result As Long

WizHook.Key = 51488399
result = WizHook.WizMsgBox(Prompt & "@" & Prompt2 & "@" & Prompt3 & "@", Title, Buttons, HelpContext, HelpFile)

MsgBox2 = result

End Function

Ich habe die Reihenfolge der Parameter entsprechend der eingebauten MsgBox angeordnet, nur die Datentypen etwas stringenter gemacht. Dadurch wird eine einfache Ersetzung von “MsgBox” durch “MsgBox2” möglich sein, ohne dass der Code zwingend angefasst werden muss – außer man will von den neuen Features Gebrauch machen. Die beiden zusätzlichen Parameter habe ich “Prompt2” und “Prompt3” genannt und am Ende angefügt. Diese neue Funktion kümmert sich auch automatisch um die richtige Anzahl der “@”-Zeichen und berücksichtigt auch die Tatsache, dass die WizHook-Funktion eine andere Reihenfolge der Parameter verlangt.

Noch eleganter geht es natürlich, wenn der hier beschriebene Weg verfolgt wird. Dann braucht zunächst überhaupt nichts am Code verändert zu werden, was dann auch die Quellcodeverwaltung übersichtlicher macht. Und vor allem muss auch die oben gelistete Funktion nur an zwei Stellen geändert werden: Der Name der Funktion muss dann “MsgBox” lauten, und der Rückgabewert natürlich entsprechend. Einfacher geht es kaum.

Vorher – nachher

Hier ein Vergleich der beiden Funktionen:

ParameterMsgBoxMsgBox2
Erster AbsatzPrompt (Variant)Prompt (String)
ButtonsButtons (VbMsgBoxStyle)Buttons (VbMsgBoxStyle)
TitelTitle (Variant)Title (String)
HelpFileHelpFile (Variant)HelpFile (String)
HelpContextContext (Variant)Context (Long)
Zweiter AbsatzPrompt2 (String)
Dritter AbsatzPrompt3 (String)

Die verwendete Library wird übrigens von Thomas Möller sehr detailliert beschrieben und bietet noch einige weitere Überraschungen.

Einen Nachteil hat dieses moderne Märchen leider aber doch: Es funktioniert nur in MS Access.

Wichtiger Hinweis

Und eine kleine Ergänzung noch. Thomas Möller schreibt auf seiner Website:

Aus dem Umstand, das Microsoft das WizHook-Objekt nicht dokumentiert hat, ergibt sich das Risiko, dass in einer zukünftigen Version die Eigenschaften und Methoden des Objekts geändert werden. Es kann auch passieren, dass eine Eigenschaft oder Methode nicht mehr implementiert ist. Der von Ihnen erstellte Code ist dann u. U. nicht mehr lauffähig oder muss ggfs. aufwändig angepasst werden.

Diese Warnung ist durchaus ernst zu nehmen. Durch meine oben geschilderte Vorgehensweise lässt sich das Risiko für den Code zwar nicht vermeiden, wohl aber der Überarbeitungsaufwand im Falle eines Problems. Denn was zu Beginn nicht aufwändig ist, kann auch schnell wieder rückgängig gemacht werden.

Ähnliche Artikel:

Schreibe einen Kommentar

Deine Email-Adresse wird nicht veröffentlicht.

achtzehn − dreizehn =