Delphi: Как использовать переменную типа TShiftState?

Я разрабатываю приложение Delphi.
На TImage. Событие mouseDown я хочу сделать X задача, если клавиша Shift нажимается, Y задача, если клавиша CTRL нажимается и Z задача, если какой-либо из них не нажимается. Для этого я использую TShiftState переменная. Теперь у меня есть функция, в которой я должен передать эту переменную как параметр.

procedure Something(keyState : TShiftState);

Теперь В этой функции, что я должен исправить для проверки состояния ключа?

if KeyState <> ssShift then begin

end;

Вышеупомянутый код показывает ошибку.
Спасибо.

9
задан Himadri 21 February 2017 в 04:40
поделиться

2 ответа

IIUC, вам нужен пустой набор []:

Something([ssShift]); // X
Something([ssCtrl]); // Y
Something([]); // Z

Относительно вашего обновления:

procedure Something(keyState : TShiftState);
begin
  if ssShift in KeyState then // KeyState contains ssShift (and maybe more)
    X;
  if ssCtrl in KeyState then // KeyState contains ssCtrl (and maybe more)
    Y;
  if [ssShift, ssCtrl] * KeyState = [] then // KeyState contains neither ssShift nor ssCtrl
    Z;
end;

Если вас интересуют только ssShift и ssCtrl, а также другие значения (ssAlt, ssLeft,. ..) неважно, последние можно замаскировать:

procedure Something(keyState : TShiftState);
var
  MaskedKeyState : TShiftState
begin
  MaskedKeyState := KeyState * [ssShift, ssCtrl];
  if ssShift in MaskedKeyState then // MaskedKeyState contains ssShift
    X;
  if ssCtrl in MaskedKeyState then // MaskedKeyState contains ssCtrl
    Y;
  if MaskedKeyState = [] then // MaskedKeyState contains neither ssShift nor ssCtrl
    Z;
end;
11
ответ дан 4 December 2019 в 12:59
поделиться
if ssShift in keyState then
  ShowMessage('1')
else if ssCtrl in keyState then
  ShowMessage('2')
else
  ShowMessage('3')

попробуйте это

5
ответ дан 4 December 2019 в 12:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: