2012-01-09 16 views
6

में कौन सी ईवेंट कॉल प्रक्रिया निर्धारित करने के लिए मेरे पास डेल्फी में XYZ (प्रेषक: TObject) नामक एक प्रक्रिया है। मेरे फॉर्म पर एक बटन है।डेल्फी

Button.onclick:= xyz; 
Button.OnExit:= xyz; 

दोनों घटनाएं एक ही प्रक्रिया को कॉल करती हैं। मैं प्रक्रिया XYZ में निर्धारित करना चाहता हूं, जो ईवेंट इस (ऑनक्लिक या एक्सिटिट) को कॉल करता है और उसके अनुसार कोडिंग के साथ आगे बढ़ता है। यह निर्धारित करने के लिए कि कौन सी घटना निकाल दी जाती है? धन्यवाद

+0

यदि आपकी ऐसी ज़रूरत है, तो शायद आपके पास xyz में बहुत अधिक कोड है। आपको x, y e z में इसे विभाजित करना चाहिए। शायद ऑनक्लिक एक्स को कॉल करेगा, ऑनएक्सिट वाई कॉल करेगा, और दोनों ज़ेड कॉल करेंगे। –

+0

अधिक सामान्य सवाल यह है: मैं डेल्फी में "कॉल स्टैक" कैसे प्राप्त कर सकता हूं? - इस सवाल को देखें [प्रत्येक विधि/प्रक्रिया/फ़ंक्शन के लिए कॉल स्टैक/स्टैक ट्रेस को समय-समय पर लॉग इन करने का एक तरीका चाहिए] (http://stackoverflow.com/questions/2326980/need-a-way-to-periodically-log -the-call-stack-stack-trace-for-every-method-proce) – mjn

+0

@mjn यह वास्तव में यहां सहायता नहीं करेगा। निश्चित रूप से आप वीसीएल निजी कार्यान्वयन विवरण वीसीएल क्लाइंट कोड में एन्कोड नहीं करेंगे? –

उत्तर

11

आप उचित जानकारी से उस जानकारी को पकड़ नहीं सकते हैं। समाधान दो अलग-अलग शीर्ष-स्तरीय ईवेंट हैंडलर का उपयोग करना है जो बदले में एक और विधि को कॉल कर सकते हैं, यह पहचानने के लिए कि कौन सा ईवेंट संभाला जा रहा है।

type 
    TButtonEventType = (beOnClick, beOnExit); 

procedure TMyForm.ButtonClick(Sender: TObject); 
begin 
    HandleButtenEvent(beOnClick); 
end; 

procedure TMyForm.ButtonExit(Sender: TObject); 
begin 
    HandleButtenEvent(beOnExit); 
end; 

procedure TMyForm.HandleButtonEvent(EventType: TButtonEventType); 
begin 
    //use EventType to decide how to handle this 
end; 
+0

धन्यवाद डेविड। इसका सबसे आसान तरीका बेहतर है। । – Nalu

+0

क्या यह जानकारी किसी अन्य पैरामीटर का उपयोग किए बिना उसी प्रक्रिया में प्राप्त करना संभव है? – Nalu

+1

मुझे खेद है, मैं उस प्रश्न को काफी समझ नहीं पा रहा हूं। –