2010-07-02 32 views
6

Estoy desarrollando una aplicación Delphi.
En evento TImage.MouseDown Quiero hacer X tarea si se presiona la tecla Mayús, Y tarea si se presiona la tecla de control y Z tarea si no se presiona ninguna de ellas. Para eso estoy usando la variable TShiftState. Ahora tengo una función en la que tengo que pasar esta variable como parámetro.Delphi: ¿Cómo usar la variable de tipo TShiftState?

procedure Something(keyState : TShiftState); 

Ahora En esta función, ¿qué derecho tengo para verificar el estado de la llave?

if KeyState <> ssShift then begin 

end; 

El código anterior muestra un error.
Gracias.

Respuesta

9

IIUC desea que el conjunto vacío []:

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

En cuanto a su actualización

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; 

Si sólo está interesado en ssShift y ssCtrl, y los otros valores (ssAlt, ssLeft,. ..) no importan, puede enmascarar estas últimas a cabo:

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; 
+0

Consulte mi pregunta editada .. – Himadri

+0

Gracias ... Usted proporciona todo lo que necesito. – Himadri

4
if ssShift in keyState then 
    ShowMessage('1') 
else if ssCtrl in keyState then 
    ShowMessage('2') 
else 
    ShowMessage('3') 

intente esto

Cuestiones relacionadas