Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
199 / 24 / 12
Регистрация: 07.02.2014
Сообщений: 221
1

Работа в приложении с использованием клавиш

09.08.2014, 16:07. Показов 3377. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Делаю первые шаги. Написал приложение типа калькулятора, но считающего другие функции, но это не столь важно. Программа работает хорошо, но все управление делается мышкой. Хотелось бы добавить возможность работы и с помощью клавиатуры, типа как электронных таблицах: стрелка влево - переходим в поле для ввода слева, стрелка вниз - переходим на поле внизу, Enter - эквивалентно нажатию кнопки "рассчитать" и т.д. Как это сделать или где об этом можно почитать (поиск по форуму ничего не дал, но это, вероятнее всего, из-за неправильной формулировки вопроса)?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.08.2014, 16:07
Ответы с готовыми решениями:

Работа с клавиатурой, сочетания клавиш, блокировка клавиш
Здравствуйте! Есть такая вот задачка: Разработать программу обработки прерывания от клавиатуры,...

Нажатие клавиш в стороннем приложении
всем привет вообщем ребят с програмированием начал заниматся всего неделю :) написал пару простых...

Имитация нажатия клавиш в приложении
в игре нужно постоянно нажимать пробел! подскажите как сделать чтобы это было автоматически?

Сочетание клавиш в консольном приложении
Вот к примеру есть у меня код на C#, компилирую его, открывается командная строка, в которой,...

13
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 1
09.08.2014, 16:13 2
GetAsyncKeyState().
0
199 / 24 / 12
Регистрация: 07.02.2014
Сообщений: 221
09.08.2014, 16:25  [ТС] 3
GetAsyncKeyState()
Но этой команды в моем Бейсике нет (PureBasic 5.11 Windows x86). Отсутствует такая команда в разделе справки, а если пишу ее в код, то выдает ошибку: "строка GetAsyncKeyState() не является функцией, массивом..."
0
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 1
09.08.2014, 16:36 4
...потому что натив вызов обернут чуть с другим названием.

https://www.cyberforum.ru/post4324151.html
0
4393 / 2243 / 252
Регистрация: 28.10.2011
Сообщений: 8,573
Записей в блоге: 6
09.08.2014, 19:38 5
Лучший ответ Сообщение было отмечено DeSex как решение

Решение

Потому что на самом деле у функции имя GetAsyncKeyState_, как впрочем у других функций ОС. Это сделано чтобы не возникло конфликта имен с функциями PureBasic.

Задачу можно решить по другому - назначить так называемые "горячие клавиши". Для этого предназначена функция AddKeyboardShortcut().
0
199 / 24 / 12
Регистрация: 07.02.2014
Сообщений: 221
10.08.2014, 15:34  [ТС] 6
Цитата Сообщение от locm Посмотреть сообщение
Задачу можно решить по другому - назначить так называемые "горячие клавиши". Для этого предназначена функция AddKeyboardShortcut().
Сделал именно по этому варианту, с первым показалось сложнее разбираться. Спасибо.
0
3 / 3 / 1
Регистрация: 05.05.2013
Сообщений: 143
20.08.2014, 18:31 7
А вот у меня вопрос в тему. Пытался сделать в своей проге (мб позже выложу на оценку) "хоткеи", но AddKeyboardShortcut отказывалась срабатывать. Я надел на окно скин DarkSoft, может поэтому? Пришлось с помощью DroopyLib добавлять хоткеи (на кнопки Enter и Delete), они срабатывали, но в других приложения переставали работать. Что посоветуете?
0
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 1
20.08.2014, 18:35 8
Задачу можно решить по другому - назначить так называемые "горячие клавиши"
можно, только вот "горячие клавиши" могут быть заняты другими приложениями, так может оказаться - кто первый встал, того и тапки. Поэтому как минимум необходимо добавить возможность переназначения этих комбинаций пользователем.

GetAsyncKeyState() же будет работать.
0
109 / 88 / 28
Регистрация: 21.08.2012
Сообщений: 371
21.08.2014, 11:10 9
Цитата Сообщение от raxp Посмотреть сообщение
можно, только вот "горячие клавиши" могут быть заняты другими приложениями, так может оказаться - кто первый встал, того и тапки. Поэтому как минимум необходимо добавить возможность переназначения этих комбинаций пользователем.
Такого быть не может. Вот пример:
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
If OpenWindow(1, 5, 5, 400, 400, "Hotkey", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_C, 1)
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_V, 2)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
      Case #PB_Event_Menu
        Select EventMenu()
          Case 1
            Debug "Нажали Ctrl+C"
          Case 2
            Debug "Нажали Ctrl+V"
        EndSelect
    EndSelect
  ForEver
EndIf
И в нашей проге работает, и в других тоже не отрубается
0
4393 / 2243 / 252
Регистрация: 28.10.2011
Сообщений: 8,573
Записей в блоге: 6
21.08.2014, 11:19 10
Цитата Сообщение от Никита Однороб Посмотреть сообщение
Такого быть не может.
Речь шла о
Цитата Сообщение от mcleshiy Посмотреть сообщение
Пришлось с помощью DroopyLib добавлять хоткеи
Там может быть такое.
0
109 / 88 / 28
Регистрация: 21.08.2012
Сообщений: 371
21.08.2014, 11:20 11
locm, ну raxp процитировал тебя, а ты писал про AddKeyboardShortcut
0
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 1
21.08.2014, 11:27 12
Может.

Подозреваю, что ваша так называемая регистрация "горячих клавиш" через AddKeyboardShortcut как обертка содержит несколько иные вызовы, ибо WinAPI-шная регистрация через GlobalAddAtom() + RegisterHotKey() регистрирует комбинацию и очередь сообщений на свое приложение, и ежели оно уже кем то было занято, то другим не даст.

Добавлено через 5 минут
Пришлось с помощью DroopyLib добавлять хоткеи
Там может быть такое.
тем паче претензии необоснованны.
0
4393 / 2243 / 252
Регистрация: 28.10.2011
Сообщений: 8,573
Записей в блоге: 6
21.08.2014, 12:42 13
AddKeyboardShortcut не самом деле это не HotKey. В винде вызывается CreateAcceleratorTable. Что вызывается в линукс и макос, понятия не имею.
0
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 1
21.08.2014, 12:50 14
...тем паче
0
21.08.2014, 12:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.08.2014, 12:50
Помогаю со студенческими работами здесь

Коды клавиш в консольном приложении
Добрый вечер! Возможно ли узнать код клавиши, которая была нажата. Просто при обработке событий с...

Глобальный отлов клавиш в приложении
Осваиваю Pascal abc net. Столкнулся с проблемой. Хочу написать программу, которая считыват любые...

Использование клавиш со стрелками в приложении
Нужно сделать так: Если вверх то все остальные стоят, Если вниз все остальные стоят, если вправо...

Отловить нажатие клавиш в приложении
не знаю может мозгов(не спорю, в с# не очень знаю, новичок) нужно реализовать программу, нашёл...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru