Управление!

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Управление!

Сообщение Max! » 18.04.2003 (Пт) 1:01

Как сделать и можно ли так что бы моя прога в игре зарезервировала кнопки на клаве , например F1 выход из игры и тд...? :?:
Max!

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 18.04.2003 (Пт) 4:07

Довольно просто...

1) Создаёшь на форме таймер с интервалом ~50;
2) Пишешь API декларации;
3) Пишешь код таймера;

Код: Выделить всё
Private Declare Function GetKeyboardState Lib "user32" Alias "GetKeyboardState" (pbKeyState As Byte) As Long
Private Const VK_F1 = &H1B

Private Sub Timer1_Timer()
If GetKeyboardState(F1)<0 then ...(мои действия)...
End Sub

Коды остальных клавиш посмотри в Api Viewer...

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 18.04.2003 (Пт) 9:28

Невышло , сразу как я запускаю прогу возникает ошибка , это произашло когда я выставил интервал у тамера и даже когда кампелирую прогу тоже эта ошибка! ожет я неправильно разместил коды :
В (General) я засунул :

Private Declare Function GetKeyboardState Lib "user32" Alias "GetKeyboardState" (pbKeyState As Byte) As Long
Private Const VK_F1 = &H1B

В таимер:
Private Sub Timer1_Timer()
If GetKeyboardState(F1)<0 then MsgBox "???", 0, "???"
End Sub

Всё как ты сказал мне кажется! :!: :?:
Max!

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 18.04.2003 (Пт) 14:48

Private Const VK_F1 = &H1B


А в вызове функции ты написал просто F1:

If GetKeyboardState(F1)<0 then MsgBox "???", 0, "???"


Исправь, и должно заработать.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 18.04.2003 (Пт) 14:57

А вообще можно и так. :wink:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Sub Form_Activate()
Do
If GetKeyState(vbKeyF1) = -127 Or GetKeyState(vbKeyF1) = -128 Then MsgBox "d"
Sleep 2
DoEvents
Loop
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
End
End Sub

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 18.04.2003 (Пт) 17:55

А можно без API и ТАйМЕРОВ!!!

Установи у формы KeyPreview = True и пиши

Код: Выделить всё
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyF1 Then
        MsgBox "F1"
    End If
End Sub

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 18.04.2003 (Пт) 18:02

Спасибо всем всё работает ! :!: :!: :!:
Max!

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 19.04.2003 (Сб) 19:36

2 FAKK2: Спасибо, очепятка однако тупая %) :oops:

John_mc
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 112
Зарегистрирован: 15.06.2002 (Сб) 6:18
Откуда: Russia, Новосибирск

Сообщение John_mc » 20.04.2003 (Вс) 11:45

А как сделать по нажатию нескольких клавиш? Напремер, Ctrl + Q?
Вот так неполучается:
If KeyCode = vbKeyControl And vbKeyQ then
MsgBox"???"
End if

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.04.2003 (Вс) 12:20

If Shift And vbCtrlMask = vbCtrlMask Then
If KeyCode = vbKeyQ Then ...
End If
Lasciate ogni speranza, voi ch'entrate.

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 21.04.2003 (Пн) 18:50

John_mc писал(а):А как сделать по нажатию нескольких клавиш? Напремер, Ctrl + Q?
Вот так неполучается:
If KeyCode = vbKeyControl And vbKeyQ then
MsgBox"???"
End if


Вот тебе код, с которым ты определишь коды любых клавишь
Код: Выделить всё
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Debug.Print "KeyDown: KeyCode = " & KeyCode & "; Shift = " & Shift
End Sub


Как обычно KeyPreview=True. А далее просто жми на кнопки. Значения параметров KeyCode и Shift будет появлятся в окошечке Immediate, внизу Visial Basic-а

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 21.04.2003 (Пн) 18:52

При Ctrl+Q он выдаёт KeyDown: KeyCode = 81; Shift = 2

Значит надо писать:

If KeyCode = 81 And Shift = 2 Then
MsgBox "Ctrl + Q"
End If


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 95

    TopList