Có cách nào phân biệt được việc gõ số bằng phím thường và bằng Numpad không?

  • Thread starter Thread starter BNTT
  • Ngày gửi Ngày gửi
Liên hệ QC

BNTT

Bùi Nguyễn Triệu Tường
Thành viên danh dự
Tham gia
3/7/07
Bài viết
4,946
Được thích
23,208
Nghề nghiệp
Dạy đàn piano
Chắc các bạn đã biết rằng, khi nhập một ký tự đặc biệt, chúng ta phải nhấn Alt + 4 con số, mà 4 con số này phải ở bên Numpad thì mới được, chứ gõ bằng phím số bình thường (trên hàng đầu của bàn phím) thì không được.

Vậy, cho tôi hỏi, có cách nào để bắt người ta phải nhập số bằng Numpad không? Nhập vào trong ô hỏi mật khẩu chẳng hạn, nếu như nhập đúng dãy số đã cho, nhưng nhập bằng phím số bình thường, thì không chấp nhận?
 
Chắc các bạn đã biết rằng, khi nhập một ký tự đặc biệt, chúng ta phải nhấn Alt + 4 con số, mà 4 con số này phải ở bên Numpad thì mới được, chứ gõ bằng phím số bình thường (trên hàng đầu của bàn phím) thì không được.

Vậy, cho tôi hỏi, có cách nào để bắt người ta phải nhập số bằng Numpad không? Nhập vào trong ô hỏi mật khẩu chẳng hạn, nếu như nhập đúng dãy số đã cho, nhưng nhập bằng phím số bình thường, thì không chấp nhận?
Tôi nghĩ chắc là không được, số nào cũng là số thôi. Nhưng mà làm vậy để làm gì nhỉ? Bạn có thể cho biết mục đích của bạn được ko?
 
Upvote 0
Tôi nghĩ chắc là không được, số nào cũng là số thôi. Nhưng mà làm vậy để làm gì nhỉ? Bạn có thể cho biết mục đích của bạn được ko?
Thì hỏi để xem có thể làm như vậy không. Nếu không thì mình cũng biết là không thể.

Còn mục đích à, vi dụ mình có một cái box để nhập password trước khi mở được cái Form nào đó, biết rằng trong đó là một dãy số, nhưng phải nhập bằng Numpad thì mới OK, còn nhập bằng số thường thì không...

Nếu làm được, thì cũng vui chứ ?
 
Upvote 0
KeyNumPad

Tôi chỉ biết có 1 ít thôi, thử đưa lên đây để bạn tiếp tục nghiên cứu nhé!
Đầu tiên là dùng hàm WinAPI
Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer

sau đó là xem Help để biết các hằng VirtKey được định nghĩa như thế nào:

vbKeyNumpad0 - vbKeyNumpad1 - vbKeyNumpad2 - vbKeyNumpad3 - vbKeyNumpad4 - vbKeyNumpad5
vbKeyNumpad6 - vbKeyNumpad7 - vbKeyNumpad8 - vbKeyNumpad9 - vbKeyMultiply - vbKeyAdd
vbKeySeparator - vbKeySubtract - vbKeyDecimal - vbKeyDivide

Có thể chạy thử đoạn code sau:

Mã:
Private Sub CommandButton1_Click()
Dim keystate As Integer  ' state of the 1 key
    ' Get the state of the 1 key as returned by the function.
    ' (vbKeyNumpad1 is a VB-defined constant for 1's virtual-key code)
    keystate = GetKeyState(vbKeyNumpad1)
    ' Check the &H8000 bit of the return value.
    If keystate And &H8000 Then
        Debug.Print "The 1 key is currently down."
    Else
        Debug.Print "The 1 key is currently up."
    End If
End Sub

Trong ví dụ trên, vẽ 1 command trong sheet1, đưa code vào đó, trong module thì khai báo dùng hàm WinAPI ở trên. Khi test, nhấn giữ phím số 1 ở numpad rồi click nút command để xem kết quả ở ở sổ debug.
Hy vọng có thể giúp được 1 tí xíu cho bạn.
Thân
 
Upvote 0
Thì hỏi để xem có thể làm như vậy không. Nếu không thì mình cũng biết là không thể.

Còn mục đích à, vi dụ mình có một cái box để nhập password trước khi mở được cái Form nào đó, biết rằng trong đó là một dãy số, nhưng phải nhập bằng Numpad thì mới OK, còn nhập bằng số thường thì không...

Nếu làm được, thì cũng vui chứ ?
Việc sử dụng số bên vùng phím số hay số bên vùng phím chữ là tùy theo thói quen của từng người thôi. Bây giờ bắt buộc thì có phải tạo khó khăn cho người dùng không?! Làm cho vui thì được nhưng tôi thấy việc này chẳng có ý nghĩa gì cả.
 
Upvote 0
Có chứ anh, đương nhiên KeyCode ở Keypad Key phải khác với các KeyCode còn lại rồi (Trên bàn phím, Key (phím) nào cũng có KeyCode khác nhau).

Anh đọc đây cho nó chuẩn này: http://msdn.microsoft.com/en-us/library/0z084th3(VS.80).aspx

Phần: Numeric Keypad Key Constants

P/S: Thực ra là do mọi người chưa có cái từ khóa Numeric Keypad Key trong tay, có rồi thì mọi chuyện lại trở nên đơn giản :)
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom