14. Jak zrobić InputBox z maską wprowadzania Password: **** ?

Problem wziął się stąd, że tradycyjny InputBox nie nadaje się do wprowadzania wszelkiego rodzaju haseł, bo nie można ukryć wprowadzanego tekstu pod postacią znaków maskujących np. gwiazdek ****. Poniżej przedstawiam sposób na zmodyfikowany InputBox, który umożliwia wprowadzanie tekstów z maską Password.

'--- Dowolny moduł standardowy ---
'Na początek deklaracje dla funkcji API
Private Declare Function SetTimer Lib "user32" _
(ByVal hwnd As Long, ByVal nIDEvent As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" _
(ByVal hwnd As Long, ByVal nIDEvent As Long) As Long Private Declare Function SendMessageA Lib "user32" _ (ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As Long Private Declare Function GetFocus Lib "user32" () As Long Private Declare Sub Sleep Lib "kernel32" (ByVal dwMillisec As Long) Private Const TimerINTERVAL = 10 Private Const SleepINTERVAL = 20 'SleepINTERVAL > TimerINTERVAL Private TimerID As Long 'Funkcja zwrotna wywołana przez Timer Public Sub TimerCallback() Const EM_SETPASSWORDCHAR = &HCC Call SendMessageA(GetFocus(), EM_SETPASSWORDCHAR, Asc("*"), 0) KillTimer 0, TimerID 'Wystarczy nam jedno tiknięcie Timera End Sub 'Funkcję InputPassw(...) należy wywołać zamiast InoputBox(...) Function InputPassw(Prompt, Optional Title, Optional Default, _ Optional XPos, Optional YPos, _ Optional HelpFile, Optional Context) Dim s As String TimerID = SetTimer(0, 0, TimerINTERVAL, AddressOf TimerCallback) Sleep SleepINTERVAL s = InputBox$(Prompt, Title, Default, XPos, YPos, HelpFile, Context) If StrPtr(s) Then InputPassw = s ' OK Else InputPassw = Null ' Cancel End If End Function '--- Koniec modułu ---

Wystarczy do swojej aplikacji przekopiowac ten moduł i używać funkcji InputPassw(...) gdzie się chce.

'Przykładowe wywołanie: ?InputPassw("Podaj hasło:", "Autoryzacja", "Nie znam")

Ten kod jest efektem rozwiązań prezentowanych przez Zbigniewa Bratko, Krzysztofa Naworytę i Krzysztofa Pozorka na grupie dyskusyjnej pl.comp.bazy-danych.msaccess.

Dyskusja na powyższy temat oraz alternatywne rozwiązania dostępne są tutaj, w archiwum grupy dyskusyjnej.

K. P.