2010-07-02 4 views
6

मैं डेल्फी आवेदन विकसित कर रहा हूं।
TImage.MouseDown ईवेंट पर मैं X कार्य करना चाहता हूं यदि Shift कुंजी दबाया जाता है, Y कार्य अगर नियंत्रण कुंजी दबाया जाता है और Z कार्य उनमें से कोई भी दबाया नहीं जाता है। इसके लिए मैं TShiftState चर का उपयोग कर रहा हूं। अब मेरे पास एक ऐसा कार्य है जिसमें मुझे इस चर को पैरामीटर के रूप में पास करना होगा।डेल्फी: TShiftState प्रकार चर का उपयोग कैसे करें?

procedure Something(keyState : TShiftState); 

अब इस कार्य में मुझे कुंजी की स्थिति की जांच करने का अधिकार क्या होना चाहिए?

if KeyState <> ssShift then begin 

end; 

उपरोक्त कोड त्रुटि दिखाता है।
धन्यवाद।

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,

उत्तर

9

IIUC आप खाली सेट [] चाहते हैं। ..) कोई फर्क नहीं पड़ता, आप बाद वाले लोगों को मुखौटा कर सकते हैं:

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

कृपया मेरा संपादित प्रश्न देखें .. – Himadri

+0

धन्यवाद ... आप मुझे सभी की ज़रूरत है। – Himadri

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

इसे आजमाएं

संबंधित मुद्दे