Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/16: Рейтинг темы: голосов - 16, средняя оценка - 4.94
ada lavleis
1 / 1 / 1
Регистрация: 17.09.2013
Сообщений: 130
1

При нажатии на клавиши Num Lock, Caps Lock, Insert вывести в StatusBar состояние кнопок C++

04.02.2014, 13:06. Просмотров 2947. Ответов 9
Метки нет (Все метки)

Добрый день, уважаемые программисты, студенты, школьники, а также все посетители этого замечательного форума. помогите, пожалуйста, написать программу на C++

Задание:
При нажатии на клавиши Num Lock, Caps Lock, Insert вывести в StatusBar состояние кнопок.

заранее огромное спасибо всем за помощь.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2014, 13:06
Ответы с готовыми решениями:

StatusBar, отображать состояние клавиш Caps Lock и Insert
Подскажите, пожалуйста, как сделать так, чтоб в строке состояния было видно нажаты ли клавиши Caps...

Включен ли CAPS Lock?
Всем привет! Как мне создать такое условие? if(CAPS == true) Form1->Caption = "Lock"; // Если...

Как определить активирована Caps Lock или нет?
Доброго времени суток!!! Как определить активирована Caps Lock или нет? Заранее спасибо!!!

Как програмно нажимать NUM LOCK вкл и выкл
Как програмно нажимать NUM lOCK вкл и выкл

Вывести на экран в символическом виде состояние NUM LOCK, CAPS LOCK и SCROLL LOCK
Помогите решить задачку на турбо си Выводить на экран в символическом виде состояние NUM LOCK,...

9
Kulgar
509 / 194 / 26
Регистрация: 07.08.2013
Сообщений: 814
04.02.2014, 14:00 2
ada lavleis, обрататываете событие OnKeyDown.
Коды клавиш
0
SatanaXIII
Почетный модератор
Эксперт С++
5796 / 2791 / 385
Регистрация: 01.11.2011
Сообщений: 6,797
Завершенные тесты: 1
04.02.2014, 14:09 3

Не по теме:

Цитата Сообщение от Kulgar Посмотреть сообщение
обрататываете событие
Иначе будете обрабатывать хлопок.



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall TForm1::FormCreate(TObject *Sender)
{
for( int i=0; i<3; i++ )
    {
    StatusBar1->Panels->Add();
    StatusBar1->Panels->Items[i]->Width = StatusBar1->Parent->Width/3;
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
switch( (int)Key )
    {
    case 20  : StatusBar1->Panels->Items[0]->Text = "CapsLock";   break;
    case 144 : StatusBar1->Panels->Items[1]->Text = "NumLock";    break;
    case 145 : StatusBar1->Panels->Items[2]->Text = "ScrollLock"; break;
    }
}
1
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
27173 / 18171 / 7194
Регистрация: 22.10.2011
Сообщений: 32,025
Записей в блоге: 6
04.02.2014, 14:25 4
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Это надо делать не по OnKeyDown, а по OnKeyUp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key, TShiftState Shift)
{
    switch (Key)
    {
    case VK_CAPITAL:
        StatusBar1->Panels->Items[0]->Text = (::GetKeyState(VK_CAPITAL)) ? "CapsLock" : "";
        break;
    case VK_NUMLOCK:
        StatusBar1->Panels->Items[1]->Text = (::GetKeyState(VK_NUMLOCK)) ? "NumLock" : "";
        break;
    case VK_SCROLL:
        StatusBar1->Panels->Items[0]->Text = (::GetKeyState(VK_SCROLL)) ? "ScrollLock" : "";
        break;
    }
}
, по OnKeyDown тот самый toggle state не будет изменяться... И не забыть KeyPreview формы перебросить в True.
1
04.02.2014, 14:25
Kulgar
509 / 194 / 26
Регистрация: 07.08.2013
Сообщений: 814
04.02.2014, 14:30 5
Цитата Сообщение от UI Посмотреть сообщение
Это надо делать не по OnKeyDown, а по OnKeyUp
по OnKeyDown тот самый toggle state не будет изменяться...
Мда.. если делать рогатку, то из "тританиумных" стержней, стреляющую "квазикарпускулярными" сгустками энергии...
Котэ, зачОт.
Я бы сказал, что таковая точность здесь не требуется... Но...

В какой книге об этом можно прочитать подробнее?
0
D1973
Модератор
4099 / 2947 / 1420
Регистрация: 21.01.2014
Сообщений: 12,588
Записей в блоге: 3
Завершенные тесты: 1
04.02.2014, 14:38 6
Цитата Сообщение от UI Посмотреть сообщение
Это надо делать не по OnKeyDown, а по OnKeyUp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key, TShiftState Shift)
{
    switch (Key)
    {
    case VK_CAPITAL:
        StatusBar1->Panels->Items[0]->Text = (::GetKeyState(VK_CAPITAL)) ? "CapsLock" : "";
        break;
    case VK_NUMLOCK:
        StatusBar1->Panels->Items[1]->Text = (::GetKeyState(VK_NUMLOCK)) ? "NumLock" : "";
        break;
    case VK_SCROLL:
        StatusBar1->Panels->Items[0]->Text = (::GetKeyState(VK_SCROLL)) ? "ScrollLock" : "";
        break;
    }
}
, по OnKeyDown тот самый toggle state не будет изменяться... И не забыть KeyPreview формы перебросить в True.

В последнем case надо указать VK_INSERT согласно техусловия :-)
И кроме того я поместил проверки GetKeyState в FormActivate, чтобы сразу при запуске видеть состояние клавишь
0
SatanaXIII
Почетный модератор
Эксперт С++
5796 / 2791 / 385
Регистрация: 01.11.2011
Сообщений: 6,797
Завершенные тесты: 1
04.02.2014, 14:41 7
Цитата Сообщение от UI Посмотреть сообщение
тот самый toggle state не будет изменяться
Да. Все верно. Правильно по KeyUp.

Не правильно
А шут с ним.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
String str;
switch( (int)Key )
    {
    case 100-80 : StatusBar1->Panels->Items[0]->Text == "CapsLock" ?
                                                  str = "" :
                                                  str = "CapsLock";
                  StatusBar1->Panels->Items[0]->Text = str;
                  break;
    case 100+44 : StatusBar1->Panels->Items[1]->Text == "NumLock" ?
                                                  str = "" :
                                                  str = "NumLock";
                  StatusBar1->Panels->Items[1]->Text = str;
                  break;
    case 100+45 : StatusBar1->Panels->Items[2]->Text == "ScrollLock" ?
                                                  str = "" :
                                                  str = "ScrollLock";
                  StatusBar1->Panels->Items[2]->Text = str;
                  break;
    }
}


Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от D1973 Посмотреть сообщение
В последнем case надо указать VK_INSERT согласно техусловия :-)
И кроме того я поместил проверки GetKeyState в FormActivate, чтобы сразу при запуске видеть состояние клавишь
Сейчас Kulgar вас уничтожит. :D

0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
27173 / 18171 / 7194
Регистрация: 22.10.2011
Сообщений: 32,025
Записей в блоге: 6
04.02.2014, 14:42 8
Цитата Сообщение от Kulgar Посмотреть сообщение
Я бы сказал, что таковая точность здесь не требуется... Но...
А я бы сказал, что надо задание читать внимательно:
Цитата Сообщение от ada lavleis Посмотреть сообщение
При нажатии на клавиши Num Lock, Caps Lock, Insert вывести в StatusBar состояние кнопок.
Состояние кнопок - это как минимум "нажата - отжата", иначе смысл какой от этого? После первого же нажатия на кнопку ее "состояние" всегда будет "Активна"?
0
Kulgar
509 / 194 / 26
Регистрация: 07.08.2013
Сообщений: 814
04.02.2014, 15:26 9
UI, это элементарная лабораторная работа.
При запуске проверить состояние, вывести в статус бар и по любому из событий OnKeyPress, OnKeyDown, OnKeyUp менять.
Для учебного задания приведённые Вами нюансы не требуются. А вот в процессе проверки, если бы эти нюансы выплыли (преподаватель хардкорный), то и был бы золотой для студента момент научения. А Вы человека этого лишаете. Медвежья услуга по факту.

Гораздо лучше было бы, если Вы ответили на вопрос:
Цитата Сообщение от Kulgar Посмотреть сообщение
В какой книге об этом можно прочитать подробнее?
0
ada lavleis
1 / 1 / 1
Регистрация: 17.09.2013
Сообщений: 130
04.02.2014, 22:51  [ТС] 10
ВСЕМ спасибо за ответы и советы.
0
04.02.2014, 22:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 22:51

Работа с клавиатурой (клавиши num lock, caps lock, scroll lock)
определить состояние статуса клавиш &quot; num lock, caps lock,scroll lock &quot; с отображением и их...

Acer aspire 5552G-N974G64Mikk Проблема с Caps Lock, Num Lock, Scroll Lock
Вообщем у меня такая же проблемма http://www.cyberforum.ru/notebooks/thread552722.html ...

Клавиатура мигает всеми тремя индикаторами Caps Lock, Scroll Lock и Num Lock и соответственно не работает!
Здравствуйте парни и девушки! Столкнулся с такой проблемой! Имеется клавиатура Genius Ergomedia...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru