powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
19 сообщений из 19, страница 1 из 1
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39023866
Доброго времени суток,

скажите, можно ли как-то для элементов управления на форме назначить сочетание клавиш на клавиатуре, по которым эти элементы срабатывали бы?

Скажем, есть кнопка на форме. Можно ли назначить ей сочетание клавиш, по которому бы она нажималась?
...
Рейтинг: 0 / 0
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39023873
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никита Осенний,
11153036
...
Рейтинг: 0 / 0
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39023877
2870
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никита ОсеннийСкажем, есть кнопка на форме. Можно ли назначить ей сочетание клавиш, по которому бы она нажималась?
Устанавливаете для формы свойство "Перехват нажатия клавиш" (KeyPreview) = Да
и в коде формы, в процедуре Form_KeyUp (или Form_KeyDown) анализируете KeyCode и Shift и при нужном их сочетании вызываете свою Кнопка_Click
...
Рейтинг: 0 / 0
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39027130
2870,

Перехват включил.
а как анализировать?
автори в коде формы, в процедуре Form_KeyUp (или Form_KeyDown) анализируете KeyCode и Shift и при нужном их сочетании вызываете свою Кнопка_Click
...
Рейтинг: 0 / 0
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39027141
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никита ОсеннийПерехват включил.
а как анализировать?Примерно так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
 Dim intShiftDown As Boolean, _
     intAltDown As Boolean, _
     intCtrlDown As Boolean
 intShiftDown = (Shift And acShiftMask) > 0
 intAltDown = (Shift And acAltMask) > 0
 intCtrlDown = (Shift And acCtrlMask) > 0
 Select Case KeyCode
  Case vbKeyA
   If intAltDown And Not intShiftDown And Not intCtrlDown Then
.................
.................
.................
...
Рейтинг: 0 / 0
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39027160
__Michelle,

авторIf intAltDown And Not intShiftDown And Not intCtrlDown Then
если ALT зажата, а Shift и CTRL нет, то...

Так а сочетания типа ALT+U, т.е. с буквами как делать?
...
Рейтинг: 0 / 0
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39027174
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никита Осенний, начало не там.)))
Сначала проверяется значение KeyCode перебором значимых для Вас вариантов в Select Case,
в моем примере проверяется, не нажата ли клавиша A (Case vbKeyA),
а затем, если нажата клавиша A, проверяется, нажаты/не нажаты ли при этом "модификаторы" Alt, Shift, Ctrl.
Код: vbnet
1.
2.
Case vbKeyA
   If intAltDown And Not intShiftDown And Not intCtrlDown Then


Для буквы U с ALT будет так
Код: vbnet
1.
2.
Case vbKeyU
   If intAltDown Then

KeyDown, KeyUp Events - Event Procedures


To create an event procedure that runs when the KeyDown or KeyUp event occurs, set the OnKeyDown or OnKeyUp property to [Event Procedure], and click the Build button .

Syntax

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

Private Sub controlname_KeyDown(KeyCode As Integer, Shift As Integer)

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)

Private Sub controlname_KeyUp(KeyCode As Integer, Shift As Integer)

The KeyDown and KeyUp events have the following arguments.

Argument Description
controlname The name of the control whose KeyUp or KeyDown event procedure you want to run.
KeyCode A key code, such as vbKeyF1 (the F1 key) or vbKeyHome (the HOME key). To specify key codes, use the intrinsic constants shown in the Object Browser. You can prevent an object from receiving a keystroke by setting KeyCode to 0.
Shift The state of the SHIFT, CTRL, and ALT keys at the time of the event. If you need to test for the Shift argument, you can use one of the following intrinsic constants as bit masks:
Constant Description
acShiftMask The bit mask for the SHIFT key.
acCtrlMask The bit mask for the CTRL key.
acAltMask The bit mask for the ALT key.


Remarks

You test for a condition by first assigning each result to a temporary integer variable and then comparing the Shift argument to an intrinsic constant. Use the And operator with the Shift argument to test whether the condition is greater than 0, indicating that the SHIFT, CTRL, or ALT key was pressed, as in the following example:

ShiftDown = (Shift And acShiftMask) > 0In an event procedure, you can test for any combination of conditions, as in the following example:

If ShiftDown And CtrlDown Then
. ' Do this if SHIFT and CTRL keys are pressed.
.
.
End IfYou can use the KeyDown and KeyUp event procedures to interpret the uppercase and lowercase version of each character by testing for both the KeyCode argument and the Shift argument. The KeyCode argument indicates the physical key pressed (thus, A and a are considered the same key), and the Shift argument indicates the state of SHIFT+key and returns either A or a.

Use the KeyDown and KeyUp event procedures for keyboard handlers if you need to respond to both the pressing and releasing of a key.

You can respond to specific keys pressed in a form, regardless of which control has the focus. For example, you may want the key combination CTRL+X to always perform the same action on a form. To make sure a form receives all keyboard events, even those that occur for controls, before they occur for the controls, set the KeyPreview property of the form to Yes. With this property setting, all keyboard events occur first for the form, and then for the control that has the focus. You can respond to specific keystrokes in the form's KeyDown, KeyPress and KeyUp events. You can prevent a control from receiving keystrokes you've responded to, and prevent the keyboard events from occurring for the control, by setting the KeyCode argument to 0 for both the KeyDown and KeyUp events, and setting the KeyAscii argument to 0 for the KeyPress event (if the key is an ANSI key). You must set all three arguments to 0 if you don't want the control to receive the keystrokes.

You can use the arguments for the KeyDown, KeyPress, and KeyUp events, in conjunction with the arguments for the MouseDown, MouseUp, and MouseMove events, to make your application work smoothly for both keyboard and mouse users.

You can't cancel the KeyDown or KeyUp event.
...
Рейтинг: 0 / 0
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39027178
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никита Осенний,
Вот так обозначаются клавиши
Keycode Constants


The following constants can be used anywhere in your code in place of the actual values:

Constant Value Description
vbKeyLButton 0x1 Left mouse button
vbKeyRButton 0x2 Right mouse button
vbKeyCancel 0x3 CANCEL key
vbKeyMButton 0x4 Middle mouse button
vbKeyBack 0x8 BACKSPACE key
vbKeyTab 0x9 TAB key
vbKeyClear 0xC CLEAR key
vbKeyReturn 0xD ENTER key
vbKeyShift 0x10 SHIFT key
vbKeyControl 0x11 CTRL key
vbKeyMenu 0x12 MENU key
vbKeyPause 0x13 PAUSE key
vbKeyCapital 0x14 CAPS LOCK key
vbKeyEscape 0x1B ESC key
vbKeySpace 0x20 SPACEBAR key
vbKeyPageUp 0x21 PAGE UP key
vbKeyPageDown 0x22 PAGE DOWN key
vbKeyEnd 0x23 END key
vbKeyHome 0x24 HOME key
vbKeyLeft 0x25 LEFT ARROW key
vbKeyUp 0x26 UP ARROW key
vbKeyRight 0x27 RIGHT ARROW key
vbKeyDown 0x28 DOWN ARROW key
vbKeySelect 0x29 SELECT key
vbKeyPrint 0x2A PRINT SCREEN key
vbKeyExecute 0x2B EXECUTE key
vbKeySnapshot 0x2C SNAPSHOT key
vbKeyInsert 0x2D INSERT key
vbKeyDelete 0x2E DELETE key
vbKeyHelp 0x2F HELP key
vbKeyNumlock 0x90 NUM LOCK key



The A key through the Z key are the same as the ASCII equivalents A – Z:

Constant Value Description
vbKeyA 65 A key
vbKeyB 66 B key
vbKeyC 67 C key
vbKeyD 68 D key
vbKeyE 69 E key
vbKeyF 70 F key
vbKeyG 71 G key
vbKeyH 72 H key
vbKeyI 73 I key
vbKeyJ 74 J key
vbKeyK 75 K key
vbKeyL 76 L key
vbKeyM 77 M key
vbKeyN 78 N key
vbKeyO 79 O key
vbKeyP 80 P key
vbKeyQ 81 Q key
vbKeyR 82 R key
vbKeyS 83 S key
vbKeyT 84 T key
vbKeyU 85 U key
vbKeyV 86 V key
vbKeyW 87 W key
vbKeyX 88 X key
vbKeyY 89 Y key
vbKeyZ 90 Z key



The 0 key through 9 key are the same as their ASCII equivalents 0 – 9:

Constant Value Description
vbKey0 48 0 key
vbKey1 49 1 key
vbKey2 50 2 key
vbKey3 51 3 key
vbKey4 52 4 key
vbKey5 53 5 key
vbKey6 54 6 key
vbKey7 55 7 key
vbKey8 56 8 key
vbKey9 57 9 key



The following constants represent keys on the numeric keypad:

Constant Value Description
vbKeyNumpad0 0x60 0 key
vbKeyNumpad1 0x61 1 key
vbKeyNumpad2 0x62 2 key
vbKeyNumpad3 0x63 3 key
vbKeyNumpad4 0x64 4 key
vbKeyNumpad5 0x65 5 key
vbKeyNumpad6 0x66 6 key
vbKeyNumpad7 0x67 7 key
vbKeyNumpad8 0x68 8 key
vbKeyNumpad9 0x69 9 key
vbKeyMultiply 0x6A MULTIPLICATION SIGN (*) key
vbKeyAdd 0x6B PLUS SIGN (+) key
vbKeySeparator 0x6C ENTER key
vbKeySubtract 0x6D MINUS SIGN (–) key
vbKeyDecimal 0x6E DECIMAL POINT (.) key
vbKeyDivide 0x6F DIVISION SIGN (/) key



The following constants represent function keys:

Constant Value Description
vbKeyF1 0x70 F1 key
vbKeyF2 0x71 F2 key
vbKeyF3 0x72 F3 key
vbKeyF4 0x73 F4 key
vbKeyF5 0x74 F5 key
vbKeyF6 0x75 F6 key
vbKeyF7 0x76 F7 key
vbKeyF8 0x77 F8 key
vbKeyF9 0x78 F9 key
vbKeyF10 0x79 F10 key
vbKeyF11 0x7A F11 key
vbKeyF12 0x7B F12 key
vbKeyF13 0x7C F13 key
vbKeyF14 0x7D F14 key
vbKeyF15 0x7E F15 key
vbKeyF16 0x7F F16 key

...
Рейтинг: 0 / 0
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39027203
__Michelle,

работает) Спасибо огромное!)

Немного не по теме, но может тоже подскажете

Хочу горячую клаивушу повестить ещё и на пару кнопок. Можно, конечно, код кнопок скопировать и вставить под условие при нажатии клавиши - это без проблем. Но может можно как-то программно нажать эту кнопку?
...
Рейтинг: 0 / 0
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39027221
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никита Осеннийможет можно как-то программно нажать эту кнопку?Если в прямом смысле "программно нажать", то
Код: vbnet
1.
2.
Кнопка.SetFocus
SendKeys "{Enter}" 

.Но так делать не надо.)))
Можно ведь просто вызвать процедуру обработки события нажатия
Код: vbnet
1.
Call Кнопка_Click
...
Рейтинг: 0 / 0
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39027282
__Michelle,

Спасибо огромное!)
...
Рейтинг: 0 / 0
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39027302
__Michelle,

а как быть, если я хочу получать значение клавиши из таблицы? Например:

Код: vbnet
1.
host_key = DLookup("[Ключ1]", "Ключи", "[ИД_Ключа]=3")


в переменную занесётся буква А (так в таблицу записано).
А теперь я хочу эту букву вставить сюда:
Код: vbnet
1.
2.
Select Case KeyCode
  Case vbKeyA



Типа
Код: vbnet
1.
2.
Select Case KeyCode
  Case vbKey & host_key



Вот только ошибка - Type mismatch

Как быть?
...
Рейтинг: 0 / 0
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39027335
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никита Осенний,

Попробуйте так
Код: vbnet
1.
2.
Select Case KeyCode
  Case Asc(host_key)
...
Рейтинг: 0 / 0
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39027350
__Michelle,
да, работает. спасибо.

а как быть с конструкцией

Код: vbnet
1.
If intAltDown Then



Можно ли как-то тут вместо Alt переменную вставить?
...
Рейтинг: 0 / 0
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39027363
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никита Осеннийа как быть с конструкцией

Код: vbnet
1.
If intAltDown Then



Можно ли как-то тут вместо Alt переменную вставить?То есть, хотите сымитировать нажатие Alt?
intAltDown это уже переменная.
При нажатой клавише Alt intAltDown принимает значение True, в противном случае - False.
Вот это и используйте.
...
Рейтинг: 0 / 0
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39027379
__Michelle,

типа этого?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Select Case KeyCode
   Case Asc(Key)
    If host_key = "Alt" Then
        If intAltDown Then
            MsgBox "ALT"
        End If
    End If
    If host_key = "Shift" Then
        If intShiftDown Then
            MsgBox "Shift"
        End If
    End If
    If host_key = "Ctrl" Then
        If intCtrlDown Then
            MsgBox "Ctrl"
        End If
    End If
End Select
...
Рейтинг: 0 / 0
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39027422
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никита Осеннийтипа этого?Нет, конечно.
Вы, надеюсь, не планируете использовать модификаторы без основных клавиш?
Думаю, нужно программно вызывать функцию Form_KeyDown,
передавая ей в качестве первого аргумента Asc(host_key),
а в качестве второго аргумента значение, определяемое масками
ConstantValue acShiftMask1 acCtrlMask2 acAltMask4
Например, если надо сымитировать нажатие R+Alt+Ctrl
Код: vbnet
1.
Call Form_KeyDown(Asc("R"), 6)

А в процедуре уже разбирать, как показано здесь 18003955 .
...
Рейтинг: 0 / 0
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39027437
__Michelle,

спасибо!) Сейчас попробую.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
    #39446667
СергейНик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, __Michelle, только у Вас нашел работающий ответ на такой же вопрос!
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание в форме кнопки с быстрым к ней доступом по сочетанию (горячие клавиши)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]