KeyDown отображается на кнопку формы GUI вниз - PullRequest
0 голосов
/ 13 мая 2018

Привет. Я хотел бы спросить, возможно ли сопоставить KeyDown для клавиатур в Visual Basic 6, чтобы перевести состояние графической кнопки Command в форме в «Состояние неактивности», когда клавиша клавиатуры нажата, а затем вернулась в верхнее положение, когда вышел? Спасибо

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Я знаю о проблеме здесь, потому что я делал нечто похожее в прошлом и в итоге использовал массив PictureBoxes вместо графического CommandButtons.

В любом случае, простой обходной путь с CommandButtons предназначен для удержания фокуса, добавив к Form еще один элемент управления, который может действовать как цель фокусировки.Помните: когда активируется Form, он помещает фокус на первый фокусируемый элемент управления внутри себя.

Поскольку вы не указали в своем вопросе, какое состояние клавиатуры вам нужно, ниже приведен простойПример с клавишами a s d f .Вам потребуется менее 5 минут, чтобы запустить его.

Шаг 0:

Скопируйте и вставьте следующие объявления в Ваш VB Form:

Option Explicit
Option Base 0

Const BM_SETSTATE = &HF3    
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Dim Target(254) As Long

Шаг 1:

Добавьте в Ваш Form массив CommandButtons, например, Button (0) , Кнопка (1) , Кнопка (2) , Кнопка (3) и т. Д.Установите нужные вам свойства (Picture, DownPicture и т. Д.), А также установите:

 TabStop: False 

Дважды щелкните один из этих CommandButtons.Вы можете видеть, у вас есть только одна точка входа для всего массива элементов управления.Выберите GotFocus из выпадающего списка событий и поместите этот фрагмент кода:

Private Sub Button_GotFocus(Index As Integer)
    PicFocus.SetFocus
End Sub

Шаг 2:

На вашем VB Form, установите этосвойство:

 KeyPreview: True

Дважды щелкните Form, выберите Load в раскрывающемся списке событий и установите желаемое отображение между KeyCode и соответствующим CommandButton:

Private Sub Form_Load()
    Target(65) = Button(0).hwnd  ' 65: KeyCode for "a"
    Target(83) = Button(1).hwnd  ' 83: KeyCode for "s"
    Target(68) = Button(2).hwnd  ' 68: KeyCode for "d"
    Target(70) = Button(3).hwnd  ' 70: KeyCode for "f"
End Sub

Выберите KeyDown и KeyUp из раскрывающегося списка событий и поместите в два глобальных обработчика событий клавиатуры этот фрагмент кода - соответственно -1 для состояния пониженного уровня и 0 для состояния повышенного уровня:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    ' Debug.Print KeyCode
    Call PostMessage(Target(KeyCode), BM_SETSTATE, -1&, 0&)
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    Call PostMessage(Target(KeyCode), BM_SETSTATE, 0&, 0&)
End Sub

Шаг 3:

Наконец, добавьте к тому же VB Form PictureBox, упомянутому выше, и установите следующие свойства:

 Name: PicFocus 
 Appearance: 0-Flat 
 BorderStyle: 0-None 
 HasDC: False
 TabIndex: 0 
 TabStop: False 
 Width: 255 
 Left: -1000

Нажмите Ctrl + F5 и проверьте, что вам нужно.

0 голосов
/ 14 мая 2018

Элемент управления CommandButton имеет события мыши и клавиатуры, направленные вниз и вверх:

Private Sub Command1_Click()
  Debug.Print "click"
End Sub

Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)
  Debug.Print "keydown"
End Sub

Private Sub Command1_KeyUp(KeyCode As Integer, Shift As Integer)
  Debug.Print "keyup"
End Sub

Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Debug.Print "mousedown"
End Sub

Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Debug.Print "mouseup"
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...