Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
fliperstaa
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 8
#1

Программа должна считать клавишу shift нажатой - C++ Builder

03.12.2014, 14:23. Просмотров 804. Ответов 4
Метки нет (Все метки)

Здравствуйте! Есть вот такое задание: В зависимости от системного времени, при вводе данных с клавиатуры, в нечётные минуты считать клавишу Shift не нажатой, в чётные – нажатой.
Я реализовал это через функцию UpperCase, которая изменяет регистры букв, но полностью задания не выполняет. Можно ли сделать так, чтобы именно shift была нажатой(когда тыкаешь на цифры, выводит символы, например) ? Если можно, то как?
http://www.cyberforum.ru/cpp-builder/thread413187.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2014, 14:23
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Программа должна считать клавишу shift нажатой (C++ Builder):

При компиляции выдает ошибку!Программа должна писать число словами.
Начала делать курсовой(еще не закончен, программа готава на четверть), все шло...

Компонент IdUDPServer: Программа должна каждые 2 секунды отправлять A3D0B0 на указанный IP
Пишу программу на Билдере С++ 2010 с помощью компонента С IdUDPServer ...

Определить, какие точки находятся на одинаковом расстоянии Если таковых нет программа должна сообщать об этом
Написать программу, которая по заданным координатам трех точек на координатной...

Когда OpenDialog1 откроется, программа должна сама нажать на кнопку "Открыть"
Добрый ноч форум! У меня такое ситуация: когда OpenDialog1 откроется...

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

4
fliperstaa
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 8
03.12.2014, 14:33  [ТС] #2
Вот код проги и форма:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
TDateTime dd=Now();
unsigned short h,mm,s,ms;
dd.DecodeTime(&h,&mm,&s,&ms);
 int pos = Memo->SelLength;
   String S1,S2;
    int len= S2.Length();
 if(mm%2==0)
              {
                 Memo->SelStart=pos;
                 S1 = Memo->Text;
                 S2 = (AnsiString(Edit1->Text)).UpperCase();
 
 
 
                Memo->Text= Memo->Text+S2;
                 Edit1->Clear();
                 }
 
 else     {
                 S1 = Edit1->Text;
                 Memo->Text = Memo->Text + S1;
                 Edit1->Clear();
                 }
 
}
0
Миниатюры
Программа должна считать клавишу shift нажатой  
SatanaXIII
Супер-модератор
Эксперт С++
5765 / 2763 / 374
Регистрация: 01.11.2011
Сообщений: 6,717
Завершенные тесты: 1
03.12.2014, 17:00 #3
Цитата Сообщение от fliperstaa Посмотреть сообщение
но полностью задания не выполняет
Непонятно что под этим имелось в виду.
То есть нельзя использовать UpperCase или у вас просто не получилось?

У Edit-а есть событие KeyDown, в которое передается состояние нажатия шифта:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if( Shift.Contains( ssShift ) )
  {
  ShowMessage( "Shift pressed" );
  }
else
  {
  Shift << ssShift; // Нажать
  }
}
0
fliperstaa
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 8
03.12.2014, 17:33  [ТС] #4
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Непонятно что под этим имелось в виду.
То есть нельзя использовать UpperCase или у вас просто не получилось?

У Edit-а есть событие KeyDown, в которое передается состояние нажатия шифта:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if( Shift.Contains( ssShift ) )
  {
  ShowMessage( "Shift pressed" );
  }
else
  {
  Shift << ssShift; // Нажать
  }
}
SatanaXIII, Мне нужно, чтобы шифт сам нажимался,а не отслеживать его. UpperCase просто изменяет регистры, а цифры остаются цифрами, хотя при нажатом шифте должны меняться на символы(7=?)
0
gunslinger
случайный прохожий
1269 / 800 / 317
Регистрация: 20.07.2013
Сообщений: 2,248
04.12.2014, 01:03 #5
Лучший ответ Сообщение было отмечено fliperstaa как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
  if(mm%2==0)
  {
    //нажали и удерживаем Shift
    keybd_event(VK_SHIFT, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
    keybd_event(VK_SHIFT, 0, KEYEVENTF_EXTENDEDKEY, 0);
  }
  else
  {
    //отпускаем Shift
    keybd_event(VK_SHIFT, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
  }
1
04.12.2014, 01:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2014, 01:03
Привет! Вот еще темы с решениями:

Программа должна загружать фамилии из таблицы, и первые буквы фамилий помещать в combobox без повторений
Программа должна загружать фамилии из таблицы, и первые буквы фамилий помещать...

В зависимости от системного времени при вводе данных с клавиатуры в нечётные минуты считать клавишу Shift не н
Здравствуйте. Задание следующее - &quot;В зависимости от системного времени при...

Программа должна считать сумму всех элементов файла
Программа должна считать сумму всех элементов файла р1. Но при компиляции...

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


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

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

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