powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Перехват CTRL+S
28 сообщений из 28, показаны все 2 страниц
Перехват CTRL+S
    #39731367
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем доброе время суток.

поправьте пожалуйста что делаю нет так. вроде все просто, пишу
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Call procПерехватКлавиш(KeyCode, Shift, Form.Name)
End Sub

Public Sub procПерехватКлавиш(KeyCode As Integer, Shift As Integer, frmname As String)
If KeyCode = vbKeyS And Shift = acCtrlMask Then
   MsgBox "CTRL+S" 'вставил для проверки работы
   DoCmd.Save acForm, frmname
End If
End Sub


пробегаю отладчиком, получается, что как только CTRL нажимаешь, то событие уже срабатывает и "хватает" только CTRL (ну или то что раньше нажмешь), соответственно, дальше по условию не срабатывает то, что нужно. Если повесить на KeyUp, то корректно работает, но как-то "непревычно", что надо отпустить кнопку, вместо того, чтобы нажать. Непойму в чем туплю, вроде все просто, несколько часов уже мудрю и что-то никак. Глянул примеры с VB, VBA - вроде все верно.

Подскажите в чем "затуп"?

Заранее спасибо
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731380
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ганов Александр,

Подробнее почитайте тут https://wm-help.net/lib/b/book/267992846/455
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731382
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zimkon, спасибо за ссылку. здесь немножко не о том событии, расписано keypress. с единичным нажатием (с нажатием одной клавиши) все понятно как сделать, проблем не возникает. Книга такая имеется в домашней библиотеке :-)
А вот с CTRL+"Другая клавиша" пока не получается. Причину описал.
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731383
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zimkon, на форуме тема раскрыта http://www.sql.ru/forum/491467/keydown, будут экспериментировать.
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731384
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub DataGrid1_KeyDown(KeyCode As Integer, Shift As Integer)
   
    CtrlDown = (Shift And vbCtrlMask) > 0
    If KeyCode = vbKeyS Then
        If CtrlDown Then
        Txt = "CTRL+S."
    End If
    MsgBox "You pressed " & Txt
    End If
End Sub


С этим примером то же самое, только перехват CTRL верный, S не перехватывает, если ставить на событие KeyDown . Единственное, что здесь надо заменить это константу vbCtrlMask на acCtrlMask, а в общем суть та же. И тоже не работает
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731389
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александр,

Далось вам это CTRL + S...
Вот тут http://www.sql.ru/forum/852338/perehvat-nazhatiya-ctrl-s-kod-dlya-perehvata
в конце поймал...
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731436
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ганов Александр
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub DataGrid1_KeyDown(KeyCode As Integer, Shift As Integer)
   
    CtrlDown = (Shift And vbCtrlMask) > 0
    If KeyCode = vbKeyS Then
        If CtrlDown Then
        Txt = "CTRL+S."
    End If
    MsgBox "You pressed " & Txt
    End If
End Sub


С этим примером то же самое, только перехват CTRL верный, S не перехватывает, если ставить на событие KeyDown . Единственное, что здесь надо заменить это константу vbCtrlMask на acCtrlMask, а в общем суть та же. И тоже не работает


Решил всё-же проверить. Код
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub Поле0_KeyDown(KeyCode As Integer, Shift As Integer)
   
    CtrlDown = (Shift And acCtrlMask) > 0
    If KeyCode = vbKeyS Then
        If CtrlDown Then
            txt = "CTRL+S."
            MsgBox "You pressed " & txt
        End If
    End If

End Sub



в поле формы в access 2003 прекрасно всё перехватывает :)
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731445
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ганов Александр,
Если же вы используете событие Form_KeyDown, то как минимум надо ещё выставить свойство "Перехват нажатия клавиш - Да" в форме
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731510
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zimkon, есть такое дело. это (свойство перехвата) у меня устанавливается при открытии любой формы автоматически в процедуре открытия. access 2016. почему из обратился к форуму. потому как сам уже перепробовал все варианты :-)
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731627
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александр,
Не вкурю в чем проблема-это будет работать:
Код: vbnet
1.
2.
3.
4.
5.
6.
Private Sub ctl_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyS And Shift = 2 Then  'или KeyCode=код клавиши
'====
KeyCode = 0 'без этой строки в поле будет введен символ "s"
End If
End Sub
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731648
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku, при нажатии клавиш CTRL+s почему-то в качестве KeyCode передается символ 17, при том, что vbKeyS это 84/ 17-й это CTRL, то есть как только нажимается CTRL, то сразу передается в процедуру где при сравнении данное дело не проходит. не пойму почему передается 17-й код, а не 84-й
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731662
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
* поправка 83-й код
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731775
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александр,стесняюсь спросить: а где в коде,который предложил Вам я,фигурирует acCtrMask
Если вопрос ко мне,то давайте про мой код
(Всё правильно при нажати Ctr происходит KeyDown а в этот момент KeyCode=17 (код клавиши Ctr)
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731789
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вдогонку:в связи с вышесказанным:при нажатии CTR будет-ли условие в блоке If истинным?
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731794
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku, Ваш код тоже пробовал до текущего когда (я с него начал тему), результат тот же. acCtrMask - это как раз 2. почему и не могу понять в чем проблема
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731796
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извиняюсь,последнее сообщение не читать
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731849
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если это у Вас не работает, то причина не в коде
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731869
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смените,на всякий случай, имя переменной "txt" в Вашем коде
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731903
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот так будет работать: ("Семён Семёныч"-бриллиантовая рука)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Dim CtrlDown, txt
    CtrlDown = (Shift And acCtrlMask) > 0
    If CtrlDown Then
        If KeyCode = vbKeyS Then
            txt = "CTRL+S."
            MsgBox "You pressed " & txt
        End If
    End If
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39731916
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при нажатии CTRL KeyCode =17 и ничего не происходит-процедура выполнена,но ctrl удерживается и нажимается другая клавиша-процедура выполняется по новой,но KeyCode уже другой-понятно
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39732150
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku, то есть получается следующая картинка: при нажатии CTRL процедура полностью исполняется с нажатым CTRL, после чего при нажатии S происходит повторное исполнение процедуры, но уже в качестве KeyKode передается значение нажатой клавиши
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39732154
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim CtrlDown, txt

Debug.Print "KeyKod:" & KeyCode
Debug.Print "Shift:" & Shift
    
CtrlDown = (Shift And acCtrlMask) > 0
    If CtrlDown Then
        If KeyCode = vbKeyS Then
            txt = "CTRL+S."
            MsgBox "You pressed " & txt
        End If
    End If


вставил DEBUG
если по отдельности нажимать CTRL, то код 17, если отдельно S, то код 83
а если вместе жмешь хоть "убейся" дает 17+2
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39732157
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KeyKod:17
Shift:2
KeyKod:17
Shift:2
KeyKod:17
Shift:2
KeyKod:17
Shift:2
KeyKod:17
Shift:2
KeyKod:17
Shift:2
KeyKod:17
Shift:2
KeyKod:17
Shift:2
KeyKod:17
Shift:2
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39732170
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашел причину: если форма разделенная, то в ней не работает, а если "простая форма", то работает без проблем
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39732294
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александрнашел причину: если форма разделенная, то в ней не работает, а если "простая форма", то работает без проблемдо А-2007 разделенной формы не существовало.Позже,в угоду неизвестно кому,появились разделенные формы-"недоформы"
В ленточной(легко приводящейся к виду табличной) и табличной подчиненных формах все работает без проблем. Это только первые "грабли" на которые Вы наступили-будут еще,поверьте,если будете использовать такие формы(кстати-зачем? Ведь в табличной части выводятся все записи,а не те которые соответствуют "верхней" части формы(в отличи от ленточной или табличной подчиненных). Многозначные поля и разделенные формы-это что-то общее;больше проблем,чем пользы.Как не пользовался ни тем ни другим так и не буду-лучше слыть "старовером" чем натыкаться на "непонятки"
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39732304
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkuкстати-зачем? Ведь в табличной части выводятся все записи,а не те которые соответствуют "верхней" части формы(в отличи от ленточной или табличной подчиненных
Мне удобно видеть все записи основной таблицы, которые имеются, "перематывать" их мышкой, а не пользоваться поиском или щелкать записи последовательно. Есть штатный функционал, им и воспользовался. По мне так очень удобное представление записей. также в списке есть сортировка, отборы и т.д.
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39732364
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александр...Мне удобно видеть все записи основной таблицы, которые имеются, "перематывать" их мышкой, а не пользоваться поиском...Особенно если их десятки тысяч,хотя если БД "игрушечная"с 20 записями-годится (подружитьVBA и разделенные формы,в ряде случаев не удастся-вот о чем я говорю)
...
Рейтинг: 0 / 0
Перехват CTRL+S
    #39732370
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku, согласен с Вами полностью. Буду сразу забывать эту идею пока нет десятков тысяч записей, чтобы потом не заморачиваться. большое спасибо Вам за участие в теме
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Перехват CTRL+S
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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