Problemstellung:
Aufzeigen verschiedene Möglichkeiten von Input- und MessageBoxen mittels API und externen DLL's.
Ziel war verschiendene Möglichkeiten zu zeigen. so z.B.:
- Inputboxen, deren Eingabe mittels *** wie ein Kennwort angezeigt wird.
- Messageboxen die unabhägig von Access sind, sprich, jeglicher Code läuft im Hintergrund weiter.
- Buttons von Messageboxen können andere Beschriftungen bekommen ohne ein seperates Formular zu erstellen.
- Messageboxen werden nach einer bestimmten Zeit automatisch geschlossen ohne Useraktivität.
Diese Bsp-DB stellt eine Zusammenstellung einiger Lösungen verschiedener Autoren dar.
Das Copyright der nicht von mir stammenden Codes liegt bei diesen.
Voraussetzungen:
Das Bsp ist ab A00 lauffähig.
Die Funktions-DLL "VBEx32.dll", enthält die nonmodale MsgBox. (wird nicht registriert)
Folgende DLL wird vom Programm benötigt und bei der Installation in das Windows-Systemverzeichnis kopiert
1. Inputbox mit Kennworteingabe
Möchte man eine Kenwortabfrage mittels einer Inputbox machen, steht man vor dem Problem, das die Eingabe im Klartext erfolgt.
Schöner wäre es doch das die Eingabe mittels "***" angezeigt wird. Nun ist das ohne weiters nicht möglich.
Enweder Ihr bastelt da ein Formular das aussieht wie ein Inputbox oder Ihr nehmt diese Lösung mittels API.
Auf den Code gehe ich nicht weiter ein (s. Bsp-DB).
Die erforderlichen Parameter sind die gleichen wie bei der Standard Inputbox.
Die Parameter könnt Ihr zur Demo im Form verändern.
Um es in der Praxis zu nutzen müsst Ihr das Modul "mod_PW_InputBox" in Eure DB kopieren.
Es gibt einen kleinen Unterschied in der Programmierung.
Ihr könnt nicht der Input-Funktion den Beschriftungs- und Meldungstext direkt übergeben.
Im Modul "mod_PW_InputBox" sind 2 Variablen deklariert, die später gefüllt werden.
Public sCaption As String 'Überschrift der Inputbox Public sMlg As String 'Meldungstext der Inputbox
2. Access unabhängige Messagebox
Manchmal möchte man den User nur über Programmaktivitäten informieren, ohne dass das Programm angehalten wird.
Jetzt könnte man auch hier was eigenes machen in der Form das ein seperates Formular erstellt wird oder aber
es wird eine MS-Access unabhängige Messagebox benötigt.
Die VBEx32.dll enthält so eine MsgBox.
Diese MsgBox arbeitet im Prinzip wie eine normale MsgBox mit den gleichen Konstanten wie die normale MsgBox,
aber diese Box wartet keine Eingabe des Users ab. Es ist zwar möglich andere Buttons als OK darzustellen aber nicht sehr sinnvoll.
Die Funktion "VBEX_UserAction" gibt den Rückgabewert der MsgBox. Die Rückgabe erfolgt aber erst nach dem Schliessen der MsgBox.
Genaueres, wie Konstanten usw. s. Bsp-DB.
So sollte die MsgBox aussehen:
Und so die Taskleiste:
Jetzt kann der User die MsgBox bestätigen oder sie wird automatisch geschlossen.
Egal auf jeden Fall läuft der Programmcode im Hintergrund weiter ab.
Um die MsgBox automatisch zu schliessen hab ich eine kleine Sub geschrieben.
' wird für das Schliessen der nonmodalen MsgBox benötigt Declare Function FindWindowEx Lib "user32" _ Alias "FindWindowExA" ( _ ByVal hWnd1 As Long, _ ByVal hWnd2 As Long, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String) As Long Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal Hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As Long Public Const WM_CLOSE = &H10 Public Sub CloseWindow(strNameWindow As String) '******************************************* 'Name: CloseWindow (Sub) 'Purpose: schliesst die angegebene nonmodale MsgBox aus der VBEx32.dll ' wenn nur ein OK-Button vorhanden ist, ' benötigt die API's FindWindowEx 'Author: Thomas Keßler 'Date: Februar 11, 2003, 08:26:47 'Inputs: Name des Fensters 'Output: '******************************************* Dim lhWnd As Long On Error Resume Next lhWnd = FindWindowEx(0, 0, vbNullString, strNameWindow) Call SendMessage(lhWnd, WM_CLOSE, 0&, 0&) End Sub
Der Aufruf könnte dann so aussehen, als Parameter wird der Name der MsgBox erwartet.
CloseWindow "Bitte warten..."
Für die Verwendung müsst Ihr die VBEx32.dllin das WindowsSystem-Verzeichnis kopieren (nicht registrieren)
Und das Modul "mod_vbex_MsgBox" muss in Eure DB.
3. Messagebox mit eigenen Button Beschriftungen
Immer ein beliebtes Thema sind das ändern der Standardbeschriftungen Messagebox-Buttons.
Die meisten Lösungen laufen auf ein seperates Formular hinaus, das auch Sinn macht bei langen Beschriftungen.
Bsp-DB dazu s. hier: Ersatz für die Standard MessageBox mit benutzerdefinierten Buttonbschriftungen
Die hier vorgestellte Lösung lässt zwar lange Beschriftungen zu, aber es hat nur Sinn mit max. 15 Zeichen.
Das Ergebnis sähe so aus:
Der Aufruf der Funktion "CoolBox" erwartet als Parameter den Fensterhandle, die Beschriftung
der MsgBox, die Buttonbeschriftung(en) und das Icon.
Dim nButton As Long nButton = CoolBox(Me.Hwnd, _ "CoolMsgBox mit 1 Button und beliebiger Buttonbeschriftung", _ "CoolBox", "Ist mir egal!", , , Question
Der Rückgabewert ist beim 1. Button=1, beim 2. Button=2, beim 3. Button=3
Um es in der Praxis zu nutzen müsst Ihr das Modul "mod_MsgAPI_1" in Eure DB kopieren
4. Messagebox die MS-Access anhält sich aber nach bestimmter Zeit automatisch schliesst
Manchmal ist es erforderlich dass das Programm kurz angehalten wird um eine Info auszugeben.
Wobei es nicht erforderlich ist das User eine Aktivität zeigt.
Deshalb sollte es möglich sein das diese MsgBox nach einem freidefinierbaren Zeitraum automatisch geschlossen wird.
Benötigt wird dafür das Modul "mod_MsgAPI_2"
Da die Funktion auch MsgBox heisst wird dadurch die Standard Messagebox ersetzt.
Erfolgt der Aufruf so:
Dim lngButton As Long lngButton = MsgBox("Das ist eine normale MsgBox", _ vbCritical + vbOKOnly, "Hinweis")
wird ein normale Standard MsgBox angezeigt.
Mit dem nächsten Bsp. wird die MsgBox automatisch nach 5 Sek geschlossen.
' MsgBox nach 5 Sekunden schließen Dim lngButton As Long lngButton = MsgBox("Das ist eine API-MsgBox die sich nach 5 Sek autom. schliesst", _ vbInformation + vbOKOnly, "Testtime", , , 5)
Da hier teilweise komplexe API-Funktionen verwendet werden haftet
der Urheber nicht für eventuell auftretende Datenverluste oder sonstige Schäden
durch diese Bsp-Datenbank oder deren auszugweisen Nutzung.
Input- und Message Box Variationen
ab A00
Die Setup-Datei enthält eine Version ab A00
Ähnliche Artikel
Weiterlesen...