2010-07-02 8 views
6

Sto sviluppando un'applicazione Delphi.
Durante l'evento TImage.MouseDown, desidero eseguire l'attività X se si preme il tasto Maiusc, l'attività Y se si preme il tasto di controllo e l'attività Z se nessuna di esse viene premuta. Per quello sto usando la variabile TShiftState. Ora ho una funzione in cui devo passare questa variabile come parametro.Delphi: Come utilizzare la variabile di tipo TShiftState?

procedure Something(keyState : TShiftState); 

Ora in questa funzione cosa dovrei controllare per verificare lo stato della chiave?

if KeyState <> ssShift then begin 

end; 

Il codice sopra mostra errore.
Grazie.

risposta

9

IIUC si desidera che l'insieme vuoto []:

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

Per quanto riguarda l'aggiornamento:

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; 

Se siete interessati solo a ssShift e ssCtrl, e gli altri valori (ssAlt, ssLeft,. ..), non importa, puoi mascherare questi ultimi:

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

Si prega di vedere la mia domanda modificata .. – Himadri

+0

Grazie ... Fornire tutto ciò di cui ho bisogno. – Himadri

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

prova questo

Problemi correlati