Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 84
от 21.07.2005, 00:20

Администратор:Калашников О.А.
В рассылке:Подписчиков: 105, Экспертов: 7
В номере:Вопросов: 1, Ответов: 2


Вопрос № 23572: Здравствуйте. Вопросы по Microsoft Visual Basic 6.0. 1.Как сделать чтоб программа выполняла команды по нажатию клавиш даже когда она работает в скрытом режиме (hide). Если окно программы открыто и использовать оператор KeyCode = (33, 39 и тд...

Вопрос № 23.572
Здравствуйте.
Вопросы по Microsoft Visual Basic 6.0.
1.Как сделать чтоб программа выполняла команды по нажатию клавиш даже когда она работает в скрытом режиме (hide). Если окно программы открыто и использовать оператор KeyCode = (33, 39 и тд), то программа выполняет все команды которые в ней запрограммированы, а в скрытом режиме программа не реагирует на нажатие клавиш.
2.Почему программа работает при использований одной клавиши на одну функцию, а при использований 2 клавиш на одну функцию программа не работает, и как это исправить? Смотри пример
Пример:
If KeyCode = 18 Then END (так работает) 18 - ALT
If KeyCode = 18 + 36 Then END (так не работает) 36 - Home
3. При использований клавиш для выполнения команд если в окне нет кнопок, то работает идеально, но если добавить кнопку (например “Выход”) то нажатия клавиш игнорируются.
Отправлен: 15.07.2005, 23:13
Вопрос задал: Дмитрий Хаймин (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: _Виталий
Здравствуйте, Дмитрий Хаймин!
1. Почитай здесь:
http://www.sources.ru/vb/system/creating_hotkey_for_application.shtml

2. Потому, что надо делать так:
If KeyCode = 18 or KeyCode = 36 Then END
иначе 18+36=54; идет такая проверка KeyCode = 54

3.Потому, что при добавлении кнопки на форму и нажатии клавиш уже обрабатывается не Form_KeyDown, а Command1_KeyDown.
Что бы всё работало как ты хочешь установи Form1.KeyPreview = True.
Ответ отправил: _Виталий (статус: 4-ый класс)
Отправлен: 16.07.2005, 01:06

Отвечает: Залетин Виталий Викторович
Здравствуйте, Дмитрий Хаймин!
1. Используйте таймер (он работает даже когда основное окно программы не активно, т. е. свернуто и Вы занимаетесь чем-то другим. При этом в его событии Timer используйте АПИ функцию GetAsyncKeyState(код клавиши), которая вернет Истину, если нажата эта клавиша) либо чистое АПИ (DefWindowProc).

2. 18+36 дает 54 - Ваша прога ждет нажатия клавиши именно с таким кодом.
Если Вы хотите,чтобы программа реагировала и на 18 и на 36, то пишите эту строку так:
If Keycode=18 OR Keycode=36 Then
...
End if
Или так:
If Keycode=vbKeyAlt Or KeyCode=vbKeyHome Then
...
End if

3. У формы есть свойство KeyPreview - установите его в True и все заарботает.
---------
Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (статус: 2-ой класс)
Отправлен: 16.07.2005, 12:30


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.basicvba
Отписаться
Вспомнить пароль

В избранное