PDA

Vollständige Version anzeigen : MsgBox mit eigenen Button-Beschriftungen


TommyK
17.01.2004, 14:49
Hallo zusammen,

der Beitrag ist entstanden, da mir das Thema empfohlen wurde und ich auch denke das es doch Einige interessiert, weil doch die Frage immer wieder gestellt wird.

Problemstellung:

Es ist auf herkömmlichen Weg nicht möglich, die Button-Beschriftungen der Message-Boxen zu ändern.
Die gängigste Methode diese Beschränkung zu umgehen liegt in der Erstellung eines Formulars mit benutzerdefinierten Buttons.
Nun ist aber sehr mühevoll für jeden Einsatz eine eigenes Formular zuerstellen, mit 3 oder 4 oder 5
Buttons, Beschriftung jedesmal anders, noch ein anderes Icon usw.

Vor einiger Zeit wurde auf "http://www.access-guru.de" ein Bsp von unbekanntem Autor vorgestellt (Alle Rechte liegen trotzdem beim Autor),
das alle diese Punkte den Aufwand auf ein Minimum reduziert, da für alle Einstellungen ein Formular verwendet wird.
Gefüllt wird es durch eine Function der alle benötigten Werte übergeben wird.

Voraussetzungen:

Das Bsp ist unter A97, A00 und AXP lauffähig, unter A03 wurde es nicht getestet.

Um das vorgestellte Bsp nutzen zu können, muß man das Modul "modMsgBox2" und das Formular "frmMsgBox2" in seine DB kopieren.

Funktionsweise:

Die Standard-MessageBox wird durch das Modul ersetzt.

Um eine normale herkömmliche MsgBox aufzurufen müssen keine Veränderungen vorgenommen werden.
Aber auch hier kommt schon die neue MsgBox zum Einsatz.

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre> MsgBox &quot;Ganz einfach als Ersatz f&uuml;r das Original&quot;, vbOKOnly + vbInformation, &quot;Einfache OK-Box&quot;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Der Aufruf könnte aber genau so:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre> MsgBox2 Title:=&quot;Einfache OK-Box&quot;, _
Prompt:=&quot;Ganz einfach als Ersatz f&uuml;r das Original&quot;, _
Buttons:=vbOKOnly + vbInformation</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)
lauten.

Die Anzeige eine MsgBox mit mehreren Buttons und der Weiterverarbeitung der Rückgabewerte sähe dann so aus:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre> Select Case MsgBox2(Title:=&quot;Und nun?&quot;, _
Prompt:=&quot;Na, ist das was?&quot;, _
Buttons:=vbYesNoCancel + vbQuestion)
Case vbYes: MsgBox &quot;Ja&quot;
Case vbNo: MsgBox &quot;Nein&quot;
Case vbCancel: MsgBox &quot;Abbruch&quot;
<span class="TOKEN">End</span> Select</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Bis hierhin haben wir aber noch nicht das erreicht was das eigentliche Ziel ist, das ändern der Button-Standardbeschriftungen.

Die neue MsgBox bietet die Möglichkeit bis zu 6 benutzerdefinierte Buttons mit beliebigen Text in der MsgBox anzuzeigen.
Es können ebenfalls die bekannten Symbole mitbenutzt werden.

Desweiteren kann der Default-Button festgelegt werden und auch die Festlegung des Hotkeys mittels "&".

Um jetzt eine MsgBox mit 5 Buttons und den Beschriftungen "Ja", "Ja, alle", "Nein", "Nein, alle" und "Abbruch zu erstellen wäre
folgender Aufruf erforderlich:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre> MsgBox2 Title:=&quot;Datei &uuml;berschreiben&quot;, _
Prompt:=&quot;Die Datei xyz ist schreibgesch&uuml;tzt.&quot; &amp; vbCrLf &amp; _
&quot;Soll die Datei &uuml;berschrieben werden?&quot;, _
Buttons:=vbButton5 + vbCritical, _
UserButton1:=&quot;Ja&quot;, _
UserButton2:=&quot;Ja, alle&quot;, _
UserButton3:=&quot;Nein&quot;, _
UserButton4:=&quot;Nein, alle&quot;, _
UserButton5:=&quot;Abbruch&quot;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Um nun noch die HotKeys und den Defaultbutton festzulegen muß der Code nur geringfügig geändert werden:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre> MsgBox2 Title:=&quot;Datei &uuml;berschreiben&quot;, _
Prompt:=&quot;Die Datei xyz ist schreibgesch&uuml;tzt.&quot; &amp; vbCrLf &amp; _
&quot;Soll die Datei &uuml;berschrieben werden?&quot;, _
Buttons:=vbButton5 + vbCritical + vbDefaultButton3, _
UserButton1:=&quot;&amp;Ja&quot;, _
UserButton2:=&quot;Ja, &amp;alle&quot;, _
UserButton3:=&quot;&amp;Nein&quot;, _
UserButton4:=&quot;Nein, a&amp;lle&quot;, _
UserButton5:=&quot;A&amp;bbruch&quot;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Es sind aber auch längere Text als Beschriftungen möglich. s. das nächste Bsp.

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre>MsgBox2 Title:=&quot;Umfrage&quot;, _
Prompt:=&quot;Bitte geben Sie an wie Sie sich zur Zeit f&uuml;hlen&quot;, _
Buttons:=vbButton4 + vbQuestion, _
UserButton1:=&quot;Ich f&uuml;hle mich gar &amp;nicht gut und m&ouml;chte dieses dumme Programm beenden&quot;, _
UserButton2:=&quot;Mir ist e&amp;igentlich alles egal&quot;, _
UserButton3:=&quot;&amp;Was soll das ganze hier eigentlich?&quot;, _
UserButton4:=&quot;Also, ich finde alles ganz &amp;klasse!&quot;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Kommen wir jetzt zu den Rückgabewerten der neuen MsgBox.
Folgende Werte werden von den Buttons zurückgegeben:

Button1 = 10
Button2 = 11
Button3 = 12
Button4 = 13
Button5 = 14
Button6 = 15

Jetzt kann man daran gehen den Rückgabewert auszuwerten. Nehmen wir dazu unser letztes Bsp.
Der User bekommt je nach seinem Zustand eine Tipp was er tun soll.
Da die MsgBox 4 Buttons hat kann sie die Rückgabewerte 10-13 annehmen.

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Dim</span> i <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
i = MsgBox2(Title:=&quot;Umfrage&quot;, _
Prompt:=&quot;Bitte geben Sie an wie Sie sich zur Zeit f&uuml;hlen&quot;, _
Buttons:=vbButton4 + vbQuestion, _
UserButton1:=&quot;Ich f&uuml;hle mich gar &amp;nicht gut und m&ouml;chte dieses dumme Programm beenden&quot;, _
UserButton2:=&quot;Mir ist e&amp;igentlich alles egal&quot;, _
UserButton3:=&quot;&amp;Was soll das ganze hier eigentlich?&quot;, _
UserButton4:=&quot;Also, ich finde alles ganz &amp;klasse!&quot;)
<span class="TOKEN">If</span> i = 10 <span class="TOKEN">Then</span>
MsgBox &quot;Am besten ins Bett legen.&quot;, vbOKOnly + vbInformation, &quot;Antwort f&uuml;r Button1&quot;
<span class="TOKEN">ElseIf</span> i = 11 <span class="TOKEN">Then</span>
MsgBox &quot;Auch am besten ins Bett legen.&quot;, vbOKOnly + vbInformation, &quot;Antwort f&uuml;r Button2&quot;
<span class="TOKEN">ElseIf</span> i = 12 <span class="TOKEN">Then</span>
MsgBox &quot;Es wurde nicht &uuml;ber den Sinn gefragt.&quot;, vbOKOnly + vbInformation, &quot;Antwort f&uuml;r Button3&quot;
<span class="TOKEN">Else</span>
MsgBox &quot;Das kann ich nicht glauben.&quot;, vbOKOnly + vbInformation, &quot;Antwort f&uuml;r Button4&quot;
<span class="TOKEN">End</span> <span class="TOKEN">If</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

natürlich ist auch eine Auswertung mittels "Select Case" möglich:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre>Select Case MsgBox2(Title:=&quot;Umfrage&quot;, _
Prompt:=&quot;Bitte geben Sie an wie Sie sich zur Zeit f&uuml;hlen&quot;, _
Buttons:=vbButton4 + vbQuestion, _
UserButton1:=&quot;Ich f&uuml;hle mich gar &amp;nicht gut und m&ouml;chte dieses dumme Programm beenden&quot;, _
UserButton2:=&quot;Mir ist e&amp;igentlich alles egal&quot;, _
UserButton3:=&quot;&amp;Was soll das ganze hier eigentlich?&quot;, _
UserButton4:=&quot;Also, ich finde alles ganz &amp;klasse!&quot;)
Case vbButton1
MsgBox &quot;Am besten ins Bett legen.&quot;, vbOKOnly + vbInformation, &quot;Antwort f&uuml;r Button1&quot;
Case vbButton2
MsgBox &quot;Auch am besten ins Bett legen.&quot;, vbOKOnly + vbInformation, &quot;Antwort f&uuml;r Button2&quot;
Case vbButton3
MsgBox &quot;Es wurde nicht &uuml;ber den Sinn gefragt.&quot;, vbOKOnly + vbInformation, &quot;Antwort f&uuml;r Button3&quot;
<span class="TOKEN">Case Else</span>
MsgBox &quot;Das kann ich nicht glauben!!!&quot;, vbOKOnly + vbInformation, &quot;Antwort f&uuml;r Button4&quot;
<span class="TOKEN">End</span> Select</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)


Ich denke das ist eine gute und saubere Lösung die ein Minimum an Aufwand erfordert.

Mein Dank gilt dem unbekannten Autor.

Download: Neue MessageBox (http://www.ms-office-forum.net/daten/access/01_2004/115501.zip)