just4froum
جمعه 25 شهریور 1390, 01:31 صبح
با سلام به همگی :
همگی می دونیم که با تابع GetAsyncKeyState میشه کلید های فشرده شده رو ذخیره کرد فقط کافیه توی یک حلقه تکرار در یک تایمر بگذازیم و ... مثل کد زیر
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Sub Form_Load()
Timer1.Interval = 100
End Sub
Private Sub Timer1_Timer()
Dim x As Integer, m As Integer
For x = 48 To 90
If GetAsyncKeyState(x) <> 0 Then
m = GetAsyncKeyState(x)
If m <> 0 Then Label1.Caption = Label1.Caption & Chr(x)
End If
Next x
End Sub
(البته کد بالا برای اعداد و حروف است)
حالا مشکل من این است که اگر کاربر کلیدی را نگه دارد مثل این میمونه که چندین بار آن کلید را فشار داده البته من با کد زیر تقریبا مشکل زیر را حل کردم :
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Dim m As Integer
Private Sub Form_Load()
Timer1.Interval = 1
Timer2.Interval = 300
Timer2.Enabled = False
End Sub
Private Sub Timer1_Timer()
Dim x As Integer
For x = 48 To 90
If GetAsyncKeyState(x) = -32768 Then
Timer2.Enabled = True
If m <> x Then
Label1.Caption = Label1.Caption & Chr(x) & " "
m = x
End If
End If
Next x
End Sub
Private Sub Timer2_Timer()
Timer2.Enabled = False
m = Empty
End Sub
اما مشکل اینجاست اگر کاربر یک کلید را دوبار پشت سر هم بزند کلید ثبت نمی شود.
حالا به نظر شما من چی کار کنم یعنی با یک فشردن یک کلید کلید یکبار ثبت شود هر چقدر هم که نگه داشته شود و اگر همان کلید باز فشرده شد یکبار دیگر ثبت شود ؟؟؟
آیا api وجود دارد که شبیه رویداد key up form باشد ؟؟؟
با تشکر .
همگی می دونیم که با تابع GetAsyncKeyState میشه کلید های فشرده شده رو ذخیره کرد فقط کافیه توی یک حلقه تکرار در یک تایمر بگذازیم و ... مثل کد زیر
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Sub Form_Load()
Timer1.Interval = 100
End Sub
Private Sub Timer1_Timer()
Dim x As Integer, m As Integer
For x = 48 To 90
If GetAsyncKeyState(x) <> 0 Then
m = GetAsyncKeyState(x)
If m <> 0 Then Label1.Caption = Label1.Caption & Chr(x)
End If
Next x
End Sub
(البته کد بالا برای اعداد و حروف است)
حالا مشکل من این است که اگر کاربر کلیدی را نگه دارد مثل این میمونه که چندین بار آن کلید را فشار داده البته من با کد زیر تقریبا مشکل زیر را حل کردم :
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Dim m As Integer
Private Sub Form_Load()
Timer1.Interval = 1
Timer2.Interval = 300
Timer2.Enabled = False
End Sub
Private Sub Timer1_Timer()
Dim x As Integer
For x = 48 To 90
If GetAsyncKeyState(x) = -32768 Then
Timer2.Enabled = True
If m <> x Then
Label1.Caption = Label1.Caption & Chr(x) & " "
m = x
End If
End If
Next x
End Sub
Private Sub Timer2_Timer()
Timer2.Enabled = False
m = Empty
End Sub
اما مشکل اینجاست اگر کاربر یک کلید را دوبار پشت سر هم بزند کلید ثبت نمی شود.
حالا به نظر شما من چی کار کنم یعنی با یک فشردن یک کلید کلید یکبار ثبت شود هر چقدر هم که نگه داشته شود و اگر همان کلید باز فشرده شد یکبار دیگر ثبت شود ؟؟؟
آیا api وجود دارد که شبیه رویداد key up form باشد ؟؟؟
با تشکر .