2012-03-14 13 views
5

में निर्दिष्ट फ़ंक्शन में पॉइंटर सहेजना सुनिश्चित नहीं है कि टिटल सही है या नहीं, मुझे कुछ संग्रह में निर्दिष्ट फ़ंक्शन में एक पॉइंटर स्टोर करना है। मैं एक वैरिएबलडेल्फी

SomeFunctionName: string 

बेशक यह प्रकार एक स्ट्रिंग नहीं हो सकता है, सवाल यह है कि यह वास्तव में क्या होना चाहिए?

+0

'प्रकार TGetSomeString = फ़ंक्शन: स्ट्रिंग; // प्रलेखन में प्रक्रियात्मक प्रकारों पर पढ़ें ' – OnTheFly

+0

आमतौर पर, विधियों (प्रक्रिया या कार्य जो वर्ग से संबंधित है) के लिए आप ऑब्जेक्ट की' प्रक्रिया (तर्क) या 'फ़ंक्शन (तर्क) का उपयोग करेंगे: ऑब्जेक्ट का परिणाम टाइप करें और साथ ही घोषणा टाइप करें। http://stackoverflow.com/questions/4626614/delphi-please-explain-this-type-procedure-of-object –

उत्तर

6

आप आमतौर पर एक फ़ंक्शन पॉइंटर चर का उपयोग करेंगे। उदाहरण के लिए:

type 
    TProcedure = procedure; 

procedure MyProc1; 
begin 
end; 

procedure MyProc2; 
begin 
end; 

var 
    Proc: TProcedure; 

..... 
Proc := MyProc1; 
Proc();//calls MyProc1 
Proc := MyProc2; 
Proc();//calls MyProc2 

यह कल्पना का सबसे आसान उदाहरण है। आप प्रक्रियात्मक प्रकार निर्दिष्ट कर सकते हैं जिनमें पैरामीटर सूची, ऑब्जेक्ट प्रकारों की विधि आदि शामिल हैं। भाषा गाइड के Procedural Types विषय में और पढ़ें।

+1

SO फॉर्मेटर बग? +1 – TLama

+3

@TLama हां मैंने इसे समय-समय पर देखा है। मैंने इसकी सूचना दी है: http://meta.stackexchange.com/questions/125587/please-can-this-markdown-bug-be-fixed –

+0

@ JacekKwiecień पृष्ठ में "विधि पॉइंटर्स" नामक अनुभाग देखें जिसे डेविड संदर्भित करता है । –

1

आप वास्तव में प्रक्रिया/फ़ंक्शन को संग्रहीत नहीं कर रहे हैं लेकिन विधि संग्रहीत कर रहे हैं।

तो आपको इसके बजाय टीएम विधि का उपयोग करना चाहिए। ए टीएम विधि में ऑब्जेक्ट पॉइंटर और एक प्रक्रिया पॉइंटर है।

आप किसी अन्य पोस्ट में और अधिक विस्तार से देख सकते हैं: Save and restore event handlers

संपादित करें: ऐसा लगता है सवाल कुछ संग्रहीत TControl.onClick ईवेंट अनुरोध को दिखा के बाद वापस मूल करने के लिए संपादित किया गया है .....