|
...ist das eine Frage? Doch, ja! Denn meines Erachtens sollten
Sie die Anwender selbst entscheiden lassen, ob Ihre Anwendungen sich
mit den simplen Beep-Signalen akustisch bemerkbar machen sollen oder
nicht. Stellen Sie sich nur einmal den Lärm vor, wenn in einem
Großraumbüro mehrere Leute mit einer Anwendung arbeiten müssen,
die unablässig jede Fehleingabe, jede MessageBox, jedes Öffnen
eines Dialogs und dergleichen mehr mit einem aufgeregten Piepser
oder gar einer Klang-Fanfare quittiert. Da macht ein Abschalten
durchaus Sinn.
Mit Hilfe des hier vorgestellten Moduls können Sie zum einen
festlegen, natürlich vom Anwender einstellbar, ob die
Beep-Anweisungen in Ihrer Anwendung hörbar werden. Und zum anderen
können Sie auch systemweit das Gepiepse ein- und ausschalten. Aber
ganz abgesehen davon sollten Sie die Beep-Anweisung so sparsam wie
möglich einsetzen. Denn ein Alarmsignal verliert seine alarmierende
Wirkung, wenn es ständig und andauernd ausgelöst wird. Denken Sie
nur einmal an die Alarm-Anlage in Ihrer Nachbarschaft, die wegen
Übersensibilität oder wegen einer Fehlfunktion so oft anspringt,
dass letztlich niemand mehr darauf achtet - auch dann nicht, wenn
tatsächlich einmal Einbrecher die Ursache des Alarms sein
sollten...
Das Modul modBeep.bas bietet Ihnen zum einen die Möglichkeit,
die Aufrufe der Beep-Anweisung aus Ihrer Anwendung abzufangen und
gegebenenfalls zu unterdrücken. Das Prinzip ist einfach: Die
öffentliche Prozedur Beep überschreibt die originale VB-Anweisung,
die in dieser Prozedur nur dann aufgerufen wird, wenn die globale
Variable LocalBeep auf True gesetzt ist.
Public LocalBeep As Boolean
Public Sub Beep()
If LocalBeep Then
VBA.Beep
End If
End Sub
Zum anderen können Sie in diesem Modul das Beep-Signal
systemweit ein- und ausschalten. Dazu wird die API-Funktion SystemParametersInfo
mit dem Index SPI_SETBEEP aufgerufen, der im zweiten Parameter die
gewünschte Einstellung übergeben wird. Sie brauchen im Code Ihrer
Anwendung lediglich die Eigenschaft SysBeep auf True oder False zu
setzen. Umgekehrt liefert Ihnen diese Eigenschaft die aktuelle
Einstellung im System.
Private Declare Sub SystemParametersInfoGet Lib "user32" _
Alias "SystemParametersInfoA" (ByVal uAction As Long, _
ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long)
Private Declare Sub SystemParametersInfoSet Lib "user32" _
Alias "SystemParametersInfoA" (ByVal uAction As Long, _
ByVal uParam As Long, ByVal lpvParam As Long, ByVal fuWinIni As Long)
Private Const SPI_GETBEEP = 1
Private Const SPI_SETBEEP = 2
Private Const SPIF_SENDWININICHANGE = &H2
Private Const SPIF_UPDATEINIFILE = &H1
Public Property Get SysBeep() As Boolean
Dim nSysBeep As Boolean
SystemParametersInfoGet SPI_GETBEEP, 0, nSysBeep, 0
SysBeep = nSysBeep
End Property
Public Property Let SysBeep(ByVal New_SysBeep As Boolean)
SystemParametersInfoSet SPI_SETBEEP, CLng(New_SysBeep), 0&, _
SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE
End Property
Da der dritte Parameter der API-Funktion zum Setzen als "As
Long" mit Wertübergabe (ByVal) deklariert sein muss,
zum Auslesen jedoch als "As Any" deklariert
sein muss, damit (für eine API-Funktion sehr ungewöhnlich) eine
Variable vom Typ Boolean übergeben werden kann, werden hier zwei
separate Alias-Deklarationen verwendet.
|