Я разрабатываю приложение Delphi.
На TImage. Событие mouseDown я хочу сделать X
задача, если клавиша Shift нажимается, Y
задача, если клавиша CTRL нажимается и Z
задача, если какой-либо из них не нажимается. Для этого я использую TShiftState
переменная. Теперь у меня есть функция, в которой я должен передать эту переменную как параметр.
procedure Something(keyState : TShiftState);
Теперь В этой функции, что я должен исправить для проверки состояния ключа?
if KeyState <> ssShift then begin
end;
Вышеупомянутый код показывает ошибку.
Спасибо.
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;
if ssShift in keyState then
ShowMessage('1')
else if ssCtrl in keyState then
ShowMessage('2')
else
ShowMessage('3')
попробуйте это