บังคับให้ไฟ numlock ติดทุกครั้ง หลังจากเลือกรายการใน Combobox1



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

03 ส.ค. 63 , 13:58:43
อ่าน 153 ครั้ง

WISSANU

  • สมาชิกไท.Access
  • กระทู้: 3

  • ขอบคุณ ไท.Access

    • ดูรายละเอียด

ปัญหาคือ เวลาผมเลือก รายการใน combobox1 แล้วไฟของปุ่ม Numlock  ชอบดับเองตลอดเวลา  แล้วเวลาเลือกรายการอีกตรั้งก็จะติด เลือกรายการครั้งที่ 3 ก็จะดับ
ช่วยด้วยครับคืออยากให้ไฟติดตลอดเวลาไม่ว่ากี่ครั้งที่เลือกรายการครับ เป็น Windows 10 , Access 2007 ครับ

 

03 ส.ค. 63 , 14:30:43
ตอบกลับ #1

PNR

ปัญหาคือ เวลาผมเลือก รายการใน combobox1 แล้วไฟของปุ่ม Numlock  ชอบดับเองตลอดเวลา  แล้วเวลาเลือกรายการอีกตรั้งก็จะติด เลือกรายการครั้งที่ 3 ก็จะดับ
ช่วยด้วยครับคืออยากให้ไฟติดตลอดเวลาไม่ว่ากี่ครั้งที่เลือกรายการครับ เป็น Windows 10 , Access 2007 ครับ

ขั้นตอนนะครับ
1.สร้าง Module ใส่โค้ดในลงไปแล้วเซฟ

โค๊ด: [Select]
Option Compare Database
 Private Type OSVERSIONINFO
        dwOSVersionInfoSize As Long
        dwMajorVersion As Long
        dwMinorVersion As Long
        dwBuildNumber As Long
        dwPlatformId As Long
        szCSDVersion As String * 128   '  Maintenance string for PSS usage
      End Type
      ' API declarations:
      Private Declare Function GetVersionEx Lib "Kernel32" _
         Alias "GetVersionExA" _
         (lpVersionInformation As OSVERSIONINFO) As Long
      Private Declare Sub keybd_event Lib "user32" _
         (ByVal bVk As Byte, _
          ByVal bScan As Byte, _
          ByVal dwflags As Long, ByVal dwExtraInfo As Long)

      Private Declare Function GetKeyboardState Lib "user32" _
         (pbKeyState As Byte) As Long

      Private Declare Function SetKeyboardState Lib "user32" _
         (lppbKeyState As Byte) As Long
      ' Constant declarations:
      Const VK_NUMLOCK = &H90
      Const VK_SCROLL = &H91
      Const VK_CAPITAL = &H14
      Const KEYEVENTF_EXTENDEDKEY = &H1
      Const KEYEVENTF_KEYUP = &H2
      Const VER_PLATFORM_WIN32_NT = 2
      Const VER_PLATFORM_WIN32_WINDOWS = 1
Function IsNumLockOn() As Boolean
        Dim o As OSVERSIONINFO
        o.dwOSVersionInfoSize = Len(o)
        GetVersionEx o
        Dim keys(0 To 255) As Byte
        GetKeyboardState keys(0)
        IsNumLockOn = keys(VK_NUMLOCK)
End Function

Sub ToggleNumLock()
        Dim o As OSVERSIONINFO
        o.dwOSVersionInfoSize = Len(o)
        GetVersionEx o
        Dim keys(0 To 255) As Byte
        GetKeyboardState keys(0)
          If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then  '=====Win95
                keys(VK_NUMLOCK) = Abs(Not keys(VK_NUMLOCK))
                SetKeyboardState keys(0)
          ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then   '=====WinNT
          'Simulate Key Press
            keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
          'Simulate Key Release
            keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY _
               Or KEYEVENTF_KEYUP, 0
          End If
End Sub

Sub mySendKeys(sKeys As String, Optional bWait As Boolean = False)
Dim bNumLockState As Boolean
    bNumLockState = IsNumLockOn()
    SendKeys sKeys, bWait
    If IsNumLockOn() <> bNumLockState Then
        ToggleNumLock
    End If
End Sub

ขั้นตอนที่ 2 ไปที่ฟอร์ม เราจะทำกับ Control ตัวไหนให้กำหนด Event GoFocus ได้เลยเช่น

โค๊ด: [Select]
Private Sub Combo1_GotFocus()
Call ToggleNumLock
End Sub


Credit http://access.mvps.org/ link
เรียนเพื่อนสมาชิกและอาจารย์ทุกท่าน
ผมไม่ใช่อาจารย์และไม่ใช่ผู้ที่แตกฉานใน Access นะครับ
แค่ผู้หนึ่งที่แชร์ความรู้เท่าที่มี ถ้าหากอาจารย์ทุกท่านเห็นว่ายังไม่ถูกต้อง
กรุณาโพสตอบกระทู้ส่วนเนื้อหาที่น่าจะถูกต้องกว่าให้ด้วยเพื่อเป็นวิทยาทาน
 
โพสต์นี้ได้รับคำขอบคุณจาก: nonc31, WISSANU


บอร์ดเรียนรู้ Access สำหรับคนไทย