Создать процедуру, отслеживающую нажатие определенных клавиш клавиатуры - VB
Формулировка задачи:
Вопрос вот в чем: мне в программе нужно создать процедуру, отслеживающую нажатие определенных клавиш клавиатуры и выполняющую определенное действие, исходя из результата.
К примеру:
у меня на форме есть 9 label‘ов в виде матрицы 3х3. 8 из них закрашены синим, а 1 - красным.
Допустим, что при нажатиях клавиш w,a,s,d красный квадрат перемещался, т.е подобие хода внутри матрицы.
Если не трудно - выложите код примера...
Решение задачи: «Создать процедуру, отслеживающую нажатие определенных клавиш клавиатуры»
textual
Листинг программы
Option Explicit
Dim Act As Long, Arr() As Long
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyW: Swap Act, Act - 3
Case vbKeyS: Swap Act, Act + 3
Case vbKeyA: Swap Act, Act - 1
Case vbKeyD: Swap Act, Act + 1
End Select
End Sub
Private Sub Swap(i1 As Long, i2 As Long)
Dim lbl1 As Label, lbl2 As Label, l As Long, t As Long
If i2 < 0 Or i2 > 8 Or ((i1 + i2) Mod 3 = 2 And Abs(i1 - i2) = 1) Then Exit Sub
Arr(i1) = Arr(i1) Xor Arr(i2): Arr(i2) = Arr(i2) Xor Arr(i1): Arr(i1) = Arr(i1) Xor Arr(i2)
Set lbl1 = Me.Controls("lblItem" & Arr(i2)): Set lbl2 = Me.Controls("lblItem" & Arr(i1))
l = lbl1.Left: t = lbl1.Top: lbl1.Move lbl2.Left, lbl2.Top: lbl2.Move l, t
Act = i2
End Sub
Private Sub Form_Load()
Dim lbl As Label, i As Long
ReDim Arr(8)
For i = 0 To 8
Set lbl = Me.Controls.Add("VB.Label", "lblItem" & CStr(i))
lbl.Move Me.ScaleWidth / 3 * (i Mod 3), Me.ScaleHeight / 3 * (i \ 3), Me.ScaleWidth / 3, Me.ScaleHeight / 3
lbl.Visible = True: lbl.BackColor = vbBlue: lbl.Caption = i: Arr(i) = i
Next
lbl.BackColor = vbRed: Act = 8
End Sub