С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/41: Рейтинг темы: голосов - 41, средняя оценка - 4.78
Заблокирован

Написать обработчик события нажатия кнопки с клавиатуры

22.06.2015, 14:14. Показов 8325. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу калькулятор. Как сделать так, что бы программа воспринимала нажатие кнопок + и - с клавиатуры как... выполнение соответствующих арифметических операций?
Спасибо)))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.06.2015, 14:14
Ответы с готовыми решениями:

Назначить обработчик нажатия кнопки
Приветствую всех. Подскажите, возможно ли назначить кнопке обработчик нажатия, у которого нет параметра? void __fastcall Click(/* TObject...

Обработчик события для клавиатуры
Какое событие позволяет выполнять действие при нажатии строго определённой клавиши?

По нажатию на кнопку вызвать обработчик нажатия другой кнопки
Как сделать так, чтобы при нажатии на кнопку Button2, осуществлялся переход на функцию Button1, то есть программа заново бы начала работу....

15
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,358
Записей в блоге: 3
22.06.2015, 14:32
1. Свойство формы KeyPreview == true;
2. Событие формы OnKeyPress
C++
1
2
3
4
5
6
7
8
if(Key == VK_ADD)
{
//Действия при сложении
}
if(Key == VK_SUBTRACT)
{
//Действия при вычитании
}
Это если + и - нажимаются на вспомогательной цифровой клавиатуре.
А вообще полный список виртуальных клавиш - тут
1
Заблокирован
22.06.2015, 14:36  [ТС]
Не совсем понял. У меня же вот так выглядит процедура нажатия кнопки:

void __fastcall TForm1::Button1Click(TObject *Sender)
{

}

Куда мне тогда вставлять
Цитата Сообщение от D1973 Посмотреть сообщение
if(Key == VK_ADD)
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,358
Записей в блоге: 3
22.06.2015, 14:55
Цитата Сообщение от AntwortenSucher Посмотреть сообщение
программа воспринимала нажатие кнопок + и - с клавиатуры
И причем тут твой Button1 при такой вот постановке вопроса???
1
Заблокирован
22.06.2015, 15:09  [ТС]
Так я и говорю. Если я пишу код под Button1 то имею вышеуказанную структуру.
А чем мне её заменить для моего случая.
Как объявление сделать?
Что должно предварять написание
Цитата Сообщение от D1973 Посмотреть сообщение
if(Key == VK_ADD)
{
//Действия при сложении
}
if(Key == VK_SUBTRACT)
{
//Действия при вычитании
}
Не могу же я в любое место просто вставить это и все?

Добавлено через 6 минут
Еще и такую ошибку выдает:
[C++ Error] Unit1.cpp(20): E2451 Undefined symbol 'Key'
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,358
Записей в блоге: 3
22.06.2015, 15:12
Цитата Сообщение от D1973 Посмотреть сообщение
Событие формы OnKeyPress
Ну а как насчет того, чтобы прочитать ранее написанное?
1
Заблокирован
22.06.2015, 15:33  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Ну а как насчет того, чтобы прочитать ранее написанное?
Да, упустил этот момент.
Но теперь просто в эдит символы записываются и все.

Добавлено через 4 минуты
Я сейчас для быстрой проверки сделал так:
C++
1
2
3
4
5
6
7
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
if(Key == VK_RETURN)
  {
    ShowMessage("+");
  }
}
Вот по нажатию Enter сообщение появляется.
А если RETURN заменить на ADD, то по нажатию на + просто +в эдит записывается.

Добавлено через 7 минут
C++
1
if(Key == VK_S)
Вот на такую вещь то же ругается. [C++ Error] Unit1.cpp(32): E2451 Undefined symbol 'VK_S'
Не знаете почему?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
22.06.2015, 16:03
Цитата Сообщение от AntwortenSucher Посмотреть сообщение
Не знаете почему?
Попробуйте перевести сообщение об ошибке:
Цитата Сообщение от AntwortenSucher Посмотреть сообщение
Undefined symbol 'VK_S'
Неопределенный символ 'VK_S'
Среда вам сообщает, что не знает сочетание таких вот букв.

Все эти клавиши можно поглядеть в таблице виртуальных символов.
Или нажмите в билдере Menu->Help (или нажмите F1) и введите Virtual key codes.
1
Заблокирован
22.06.2015, 16:16  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
что не знает сочетание таких вот букв
Ну так в таблице же имеется VK_S.

Добавлено через 4 минуты
Да и не в этом главная загвоздка.
Вот это посущественне будет:
Цитата Сообщение от AntwortenSucher Посмотреть сообщение
А если RETURN заменить на ADD, то по нажатию на + просто +в эдит записывается.
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,358
Записей в блоге: 3
22.06.2015, 16:27
Хм-м. Если использовать события OnKeyUp или OnKeyDown - код отработает, но символ все равно в Едит добавится... В событии OnKeyPress - действительно, не работает. Надо поковыряться...
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
22.06.2015, 16:35
Цитата Сообщение от AntwortenSucher Посмотреть сообщение
Ну так в таблице же имеется VK_S.
Цитата Сообщение от SatanaXIII Посмотреть сообщение
нажмите в билдере Menu->Help (или нажмите F1) и введите Virtual key codes.
И убедитесь, что в вашей версии (шестой) билдера нет данной кнопочки.
1
Заблокирован
22.06.2015, 16:45  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
нажмите в билдере Menu->Help (или нажмите F1) и введите Virtual key codes.
В билдере нет Menu->Help а по нажатию F1 и поиску там по данному запросу, вообще какая-то ерунда выдается, что-то про многозагрузочную конфигурацию, и ключи к винде.

Добавлено через 4 минуты
Цитата Сообщение от SatanaXIII Посмотреть сообщение
И убедитесь
Да мне и убеждаться тогда не стоит, я на слово поверю. Вот только что в этом случае делать. Какой код у этой кнопки будет? Или подключить что-то надо? Библиотеки дополнительные может?
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
23.06.2015, 01:34
C++
1
2
if (Key == 0x2B) Button1Click(Sender);  // +
if (Key == 0x2D) Button2Click(Sender);  // -
В начале добавь переменную
C++
1
TObject *Sender;
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
23.06.2015, 08:24
Цитата Сообщение от AntwortenSucher Посмотреть сообщение
Как сделать так, что бы программа воспринимала нажатие кнопок + и - с клавиатуры
Можно использовать невизуальный компонент ApplicationEvents (его событие OnShortCut). Например__
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm1::ApplicationEvents1ShortCut(TWMKey &Msg,
      bool &Handled)
{
    Handled = true;
    if(Msg.KeyData==0x4E0001)
      Label1->Caption = Edit1->Text.ToInt()+Edit2->Text.ToInt();
    else if(Msg.KeyData==0x4A0001)
      Label1->Caption = Edit1->Text.ToInt()-Edit2->Text.ToInt();
    else Handled = false;
}
(Это для клавишей + - в цифровой области клавиатуры).
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
23.06.2015, 10:04
Цитата Сообщение от AntwortenSucher Посмотреть сообщение
Какой код у этой кнопки будет?
Открываете вон ту табличку, которую я привел, ищите там строку с VK_S, в которой находите значение 53. Это значит, что код VK_S 0x53 - шестнадцатеричная система счисления.
Можно врукопашную объявить:
C++
#define VK_S 0x53
и пользоваться как обычно.
Цитата Сообщение от AntwortenSucher Посмотреть сообщение
Или подключить что-то надо?
А зачем она вам вообще сдалась? Это ж обычная заглавная латинская буква S.
1
Заблокирован
23.06.2015, 11:57  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
А зачем она вам вообще сдалась?
Для общего развития. На будущее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.06.2015, 11:57
Помогаю со студенческими работами здесь

Вызов нажатия кнопки из другого события
Всегда вызывал нажатия кнопок из других событий вот таким способом ButtonClick(Sender); На днях нужно было вызывать нажатие кнопки из...

Внешний обработчик события
Всем доброго времени суток. есть класс: TPainter::TPainter(TPanel *panelTmp) { this->panel = panelTmp; } class...

Изменить обработчик события
Здравствуйте!!! Мне нужно изменить обработчик события StringGrid1DrawCell, хочу добавить еще параметров в процедуру. Дополняю...

Обработчик нажатия на столбец StringGrid
необходимо реализовать чтобы в StringGrid при нажатии на самую верхнюю ячейку столбца происходила сортировка и тд.. обработчик...

Как прервать обработчик события?
Доброе время суток. Помогите разобраться. По нажатию кнопки организуется длинный цикл, при этом на форме все элементы становятся...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru