Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 0
Регистрация: 02.12.2016
Сообщений: 31
1

Определить, зажат ли Shift при нажатии кнопки TButton

17.10.2018, 09:52. Показов 2016. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день всем.
Как в ButtonClick проверить нажата ли клавиша, а то у меня он ругается на Key, говорит что Error: Identifier not found "Key"

Delphi
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
28
29
30
procedure TForm1.Button3MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Key = #10 then
  begin
    if(Form1.color=clGreen)then
    begin
         Form1.color:=clYellow;
    end
    else
    if(Form1.color=clYellow)then
    begin
         Form1.color:=clRed;
    end
    else
    if(Form1.color=clRed)then
    begin
         Form1.color:=clBlue;
    end
    else
    if(Form1.color=clBlue)then
    begin
         Form1.color:=clBlack;
    end
    else
    begin
         Form1.color:=clGreen;
    end;
  end;
end;
Заранее спасибо за помощь.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2018, 09:52
Ответы с готовыми решениями:

При нажатии кнопки на клавиатуре нажимать TButton
Можно ли сделать, чтобы при нажатии кнопки на клавиатуре например буква "а" нажималась кнопка...

Компонент TButton: Изменение размера шрифта кнопки при нажатии
Необходимо разработать компоненты, основанные на модификации стандартных компонентов, в...

При добавлении компонента к примеру кнопки. В коде Button1: TButton; выдает ошибку что TButton не известно.
Прошу у вас помощи. Rad Studio XE 3 выдает глупую ошибку. При добавлении компонента к примеру...

Клавиши shift глючат, при нажатии активируется ещё по 10 клавиш на каждый shift
Добрый день. Товарищи, прошу вас помочь, на форумах ничего не нашёл, способы в стиле переустановки...

8
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
17.10.2018, 09:53 2
Можно как-то поконкретнее задание писать?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
17.10.2018, 09:54 3
И Вам добрый день. Что хотели? Может опишете проблему в теме, а не в ее названии и более подробно.
0
1 / 1 / 0
Регистрация: 02.12.2016
Сообщений: 31
17.10.2018, 10:01  [ТС] 4
по нажатию кнопки на форме выполняется смена цвета формы по кругу ,при зажатой клавиши по нажатию
на кнопку цвет меняется в другую сторону
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
17.10.2018, 10:02 5
Цитата Сообщение от LexVaha Посмотреть сообщение
при зажатой клавиши по нажатию
на кнопку цвет меняется в другую сторону
При какой именно зажатой клавише? Enter?
0
1 / 1 / 0
Регистрация: 02.12.2016
Сообщений: 31
17.10.2018, 10:03  [ТС] 6
Клавиша Shift
Цитата Сообщение от volvo Посмотреть сообщение
При какой именно зажатой клавише? Enter?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
17.10.2018, 10:10 7
Лучший ответ Сообщение было отмечено LexVaha как решение

Решение

В OnClick просто проверяй, нажат ли Shift:
Pascal
1
2
3
4
5
procedure TForm1.Button1Click(Sender: TObject);
begin
  if ssShift in GetKeyShiftState then ShowMessage('Shift нажат')
  else ShowMessage('Shift не нажат');
end;
2
1 / 1 / 0
Регистрация: 02.12.2016
Сообщений: 31
17.10.2018, 10:13  [ТС] 8
Спасибо,все заработало
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
17.10.2018, 10:39 9
А вообще твоя задача вместо того ужасного сборища if-ов решается вот так:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const
  ColorSize = 5;
  FrmColors : array[0 .. ColorSize - 1] of TColor =
    (clGreen, clYellow, clRed, clBlue, clBlack);
var
  CurrColor : Integer = 0;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
  if ssShift in GetKeyShiftState then
    CurrColor := (CurrColor + ColorSize - 1) mod ColorSize
  else CurrColor := (CurrColor + 1) mod ColorSize;
 
  Self.Color := FrmColors[CurrColor];
end;
При необходимости добавить нужное количество цветов - изменяешь ColorSize, и сам массив FrmColors, больше ничего трогать не нужно.

А теперь представь, что нужно сделать в твоем варианте, чтобы добавить, скажем, 4 цвета, да еще и не подряд, а в произвольные места, скажем, чтобы было так:
clGreen -> clLtGray -> clYellow -> clRed -> clLime -> clBlue -> clBlack -> clOlive -> clFuchsia...
0
17.10.2018, 10:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2018, 10:39
Помогаю со студенческими работами здесь

Как сделать, чтобы при первом нажатии на кнопку TButton появлялось одно сообщение, а при втором нажатии - другое?
помогите как сделать в чтобы в кнопке button при первом нажатий вылазило сообщение ShowMessage('Вы...

Компоненты TButton, при нажатии менять шрифт
При нажатии на кнопку TButton вкл/выкл полужирные шрифты на форме. При нажатии на кнопку TButton с...

TButton - нажатие кнопок на форме при нажатии стрелок на клавиатуре
Подскажите пожалуйста, мне нужно что-бы при нажатии стрелок на клавиатуре нажимались кнопки на...

При нажатии на клавишу Shift Срабатывает клавиша С
В некоторых играх (шутерах например) , персонаж приседает, хотя приседание стоит не на клавише С...


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

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