ทำให้ inputbox ซ่อนอักษรเป็นแบบ password ****
กระทู้เก่าบอร์ด อ.Yeadram

 1,106   4
URL.หัวข้อ / URL
ทำให้ inputbox ซ่อนอักษรเป็นแบบ password ****

อยากให้ inputbox ซ่อนอักษรเป็นแบบ password **** ทำอย่างไรครับ

4 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R20272
ต้องทำฟอร์มเล็กๆจำลอง inputbox เองเองครับ
2 @R20273
ขอบคุณครับ
3 @R20274
อื่ม หรือใช้ API ครอบอีกทีได้ครับ จำได้ว่าผมเคยลงในกระทู้ไปนานแล้ว หาไม่เจอครับ เอาเป็นว่าทำตามนี้ครับ

- ใส่โค๊ดลงใน Module ใหม่

Option Explicit

Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Function SendDlgItemMessage Lib "user32" Alias "SendDlgItemMessageA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Private Const EM_SETPASSWORDCHAR = &HCC
Private Const WH_CBT = 5
Private Const HCBT_ACTIVATE = 5
Private Const HC_ACTION = 0
Private hHook As Long

Private Function NewProc(ByVal lngCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim RetVal
    Dim strClassName As String, lngBuffer As Long
    If lngCode < HC_ACTION Then
        NewProc = CallNextHookEx(hHook, lngCode, wParam, lParam)
        Exit Function
    End If
    strClassName = String$(256, " ")
    lngBuffer = 255
    If lngCode = HCBT_ACTIVATE Then
        RetVal = GetClassName(wParam, strClassName, lngBuffer)
        If Left$(strClassName, RetVal) = "#32770" Then
            SendDlgItemMessage wParam, &H1324, EM_SETPASSWORDCHAR, Asc("*"), &H0 ' ตรงนี้จะเปลี่ยนเป็นอักษรอะไรก็ได้ ไม่จำเป็นต้อง *
        End If
    End If
    CallNextHookEx hHook, lngCode, wParam, lParam
End Function

Public Function InputBoxDK(Prompt, Optional Title, Optional Default, Optional XPos, Optional YPos, Optional HelpFile, Optional Context) As String
    Dim lngModHwnd As Long, lngThreadID As Long
    lngThreadID = GetCurrentThreadId
    lngModHwnd = GetModuleHandle(vbNullString)
    hHook = SetWindowsHookEx(WH_CBT, AddressOf NewProc, lngModHwnd, lngThreadID)
    InputBoxDK = InputBox(Prompt, Title, Default, XPos, YPos, HelpFile, Context)
    UnhookWindowsHookEx hHook
End Function

- การใช้งานเหมือน InputฺฺBox ทุกประการณ์ เพียงแต่เปลี่ยนชื่อเป็น InputBoxDK
เช่น

    Dim strAdminPWord As String
    strAdminPWord = InputBoxDK("กรุณาใส่รหัสผ่านของท่าน", "ช่องรหัสผ่าน")
       
    If strAdminPWord = "1234" Then
        MsgBox "ยินดีด้วยรหัสผ่านถูกต้อง", vbOKOnly, "success"
        '...
    Else
        MsgBox "รหัสของท่านไม่ถูกต้อง", ""
        ' Exit Sub
    End If

อะไรประมาณนี้อะครับ ลองดูครับ


4 @R20279
work ครับคุณ TTT ขอบคุณมากครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3054s