2012-07-24 17 views
5

कहें कि मेरे पास मेनू बार के साथ एक फॉर्म है। मेरे पास मेनू बार, एक TMenuItem पर एक आइटम है, जिसके लिए मैं एक शॉर्टकट कुंजी कॉम्बो असाइन कर सकता हूं, उदाहरण के लिए, "Ctrl-I"। लेकिन जब मैं TMenuItem के लिए "शॉर्टकट" संपत्ति असाइन करता हूं, तो ऐसा लगता है कि दबाए जाने और मेरे एक्शनमैनगर कोड को ट्रिगर करने के लिए स्वचालित रूप से शॉर्ट-कट कुंजी को सुनने के बजाय शॉर्टकट कोड दिखाने के लिए मेनू आइटम की दृश्य उपस्थिति को बदलना प्रतीत होता है।मेरे डेल्फी ऐप में हॉट-कुंजी जोड़ना

मेरा google-fu आज असफल रहा प्रतीत होता है, मुझे केवल विंडोज़ के लिए ग्लोबल-हॉट-चाबियाँ असाइन करने के तरीके के बारे में लेख मिल रहा है, न कि एप्लिकेशन-विशिष्ट हॉट-कुंजियों को कैसे असाइन करना है जो केवल सक्रिय रूप पर काम करते हैं।

क्या कोई भी मेनू में शॉर्टकट संपत्ति जोड़ने से परे हॉट-कुंजी जोड़ने के लिए आवश्यक चरणों को रेखांकित कर सकता है। मैं कहीं सोच रहा हूं कि मुझे संभवतः फॉर्म इनपुट को कीबोर्ड इनपुट के लिए सुनने और कुंजीपटल को फंसाने और इसका जवाब देने की आवश्यकता है? लेकिन मुझे बिल्कुल यकीन नहीं है कि ऐसा करने के लिए डेल्फी तरीका कहां होगा या क्या होगा।

+4

आम तौर पर, जो भी आप चाहते हैं उसे करने में कोई समस्या नहीं है। यह सिर्फ स्वचालित रूप से काम करता है। चूंकि आप एक एक्शन मैनेजर का उपयोग कर रहे हैं, इसलिए आपको 'टीएक्शन' की 'शॉर्टकट' संपत्ति का उपयोग करना चाहिए, न कि 'टीएमएनयूइटम'। –

+0

हां, बस शॉर्टकट संपत्ति असाइन करें और यह सब अच्छा है। –

+0

मेनू आइटमों के बारे में सोचें, "मेरे स्थाई रूप से परिभाषित कार्यों को प्रस्तुत करने का एक गतिशील रूप से निर्मित तरीका", इसलिए, मैंने अपने कार्यों को सेट किया है, न कि मेरे मेनू आइटम गुण। मेनू आइटम गुण एक्शन सूची, या एक्शन मैनेजर पर उत्पन्न होते हैं, और बाहर प्रचार करते हैं। –

उत्तर

6

आप क्रियाएं (एक्शनमैनेजर) का उपयोग कर रहे हैं, इसलिए इसके बजाय प्रासंगिक कार्रवाई में अपना शॉर्टकट असाइन करें। (बहुत MenuItem को कार्रवाई नियत तो मेनू आइटम के लिए शॉर्टकट प्रदान करेंगे।)

+0

यह काम किया, धन्यवाद! –

-1

खिड़की हैंडल उदाहरण पर विचार करें VCL संदेश के लिए प्रदान नहीं कर रहे हैं, जिसके लिए हम WM_HOTKEY का उपयोग करें। यह संदेश विंडोज हॉटकी में पंजीकृत विंडो द्वारा भेजा जाता है जो प्रोग्राम को इसके लिए प्रतिक्रिया देता है, यहां तक ​​कि इनपुट फोकस के बिना भी:

type 
TForm1 = class(TForm) 
    procedure FormCreate(Sender: TObject); 
    procedure FormDestroy(Sender: TObject); 
    private 
    { Private declarations } 
    // Declare a event handler 
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

{ TForm1 } 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    // Registering a hotkey Ctrl+Alt+F5 
    RegisterHotKey(Handle, 0, MOD_CONTROL or MOD_ALT, VK_F5); 
end; 

procedure TForm1.FormDestroy(Sender: TObject); 
begin 
    // Unregisters a hotkey 
    UnRegisterHotKey(Handle, 0); 
end; 

procedure TForm1.WMHotKey(var Msg: TWMHotKey); 
begin 
    // This procedure is called when a window message WM_HOTKEY 
    inherited; // We give the form to process the message, 
       // if she already has its handler 
    Beep;  // We perform additional actions 
end; 
+1

-1 प्रश्न स्पष्ट रूप से बताता है कि सिस्टम विस्तृत हॉट कुंजी की आवश्यकता नहीं है –

+0

किसी भी तरह, यह एक उपयोगी समाधान है जो दिखाता है कि वैश्विक हॉट कुंजी कैसे सेट अप करें – jimsweb

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