Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перехват сигналов клавиатуры

14K
09 декабря 2006 года
Njif
29 / / 05.12.2006
Привет всем кому не спится! :)
Ребят, кто-нибудь знает как в excel/vb перехватывать сигналы клавиатуры?
Подробнее:
Уже есть формочка. На ней есть кнопочка.Мне необходимо, чтобы по нажатию enter нажималась эта кнопка, а по нажатию esc форма закрывалась.
Есть соображения?
355
09 декабря 2006 года
<SCORP>
786 / / 21.10.2006
во-первых должно быть что-то типа OnKeyPress обработчика событий. во-вторых должны быть обработчики у диалогового окна OnOK, OnCancel это как раз то что тебе надо.
З.Ы. по поводу визуального васика не знаю точно -- я сишник, но должно быть что-то подобное
14K
09 декабря 2006 года
Njif
29 / / 05.12.2006
как такие вещи делать в borland 6.0 я тоже знаю, делал...
а тут?
257
09 декабря 2006 года
kosfiz
1.6K / / 18.09.2005
ну например вот так(у формы свойство KeyPreview должно быть true):
 
Код:
Private Sub Form_KeyPress(KeyAscii As Integer)
If (KeyAscii = 27) Then
MsgBox ("нажали Esc")
End If
End Sub

правда, если ты хочешь еще нажать и Enter, то этот код тебе уже не поможет.
355
09 декабря 2006 года
<SCORP>
786 / / 21.10.2006
да при чём тут борланд или не борланд...
обработка виндовых сообщений похожа во всех языках программирования под винду. а энтер можно поймать в обработчике KeyDown\KeyUp
257
09 декабря 2006 года
kosfiz
1.6K / / 18.09.2005
[quote=<SCORP>]а энтер можно поймать в обработчике KeyDown\KeyUp[/quote]
точно(ту ересь убрал), в первый раз просто поторопился. Enter ловится аналогично тому как я уже показывал, т.е.
 
Код:
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
MsgBox ("нажат Enter")
End If
End Sub

13 код Enter'а.
403
09 декабря 2006 года
ace lighting
411 / / 05.05.2006
можно сделать хук на клаву, но это если тока форма не в фокусе...
14K
09 декабря 2006 года
Njif
29 / / 05.12.2006
Ребят! Тогда давайте малость поподробнее.
Методы, про которые вы говорите я пробовал не помогает.Я про KeyPress/Up/Down. KeyPreview, кстати, нигде не нашел...
Может эти методы необходимо в каком-то специальном месте располагать? В коде формы - не получается...
Если что, то у меня excel 2003
257
09 декабря 2006 года
kosfiz
1.6K / / 18.09.2005
у меня тоже 2003. делаю так:сервис->макрос->редактор Visual Basic. там на первый лист делаю Insert UserForm. щелкаю по появившейся форме, чтобы открылось окно редактора кода, там сверху есть два комбобокса в одном из них написано UserFrom в другом Click. Нажимаю на второй и из списка выбираю KeyPress, а потом добавляю в появившеюся процедуру Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) код:
 
Код:
If KeyAscii = 13 Then
MsgBox ("this is Enter")
End If
14K
09 декабря 2006 года
Njif
29 / / 05.12.2006
О! Сделал, как ты говоришь и увидел разницу.Точнее я не все сказал наверное... У меня на форме еще текстбоксы есть. При их наличии не пашет. Даже если сделать то же самое для Box_KeyPress
14K
10 декабря 2006 года
Njif
29 / / 05.12.2006
Здорово!
Спасибо pashulka! Точно, помогло.
Но есть еще и другие клавиши,как: enter, backspase, arrow down - которые мне необходимо использовать для определенный действий.
Как их определить?
275
10 декабря 2006 года
pashulka
985 / / 19.09.2004
Если других кнопок нет, то для перехвата нажатий клавиш Esc и Enter можно сделать следующее : установить значение свойства Cancel = True и Default = True, а затем использовать событие :

Private Sub CommandButton1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case 13: MsgBox "ENTER", , ""
Case 27: MsgBox "ESC", , ""
End Select
End Sub

В других случаях, Вам возможно придётся использовать аналогичное событие, но для каждого элемента управления.
14K
11 декабря 2006 года
Njif
29 / / 05.12.2006
Всем большое спасибо за помощь!
Все было просто. Просто необходимо было обработчик сигналов вставить в событие keydown каждого элемента формы:
Private Sub Cases(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case 13: Click_Filter
Case vbKeySeparator: Click_Filter
Case 27: Unload Me
Set Form = Nothing
End Select
End Sub
Не получалось, потому что не для всех элементов обработчик был, а при нажатии enter происходил переход на бездействующие элементы.
Ну и для верности отключил на всех элементах все свойства связанные с переходом по нажатию клавиши и фокусировке при клике.
Еще раз спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог