this thread
और Thomas Mueller के आधार पर वहां बताया गया है, तो आप उसी हस्ताक्षर के साथ प्रकारों को परिभाषित कर सकते हैं जिनके पते आप प्राप्त करना चाहते हैं (प्रत्येक अधिभार के लिए)। यदि आप उन प्रकारों के चर घोषित करते हैं और उन्हें विधि पॉइंटर्स असाइन करते हैं तो आप सुनिश्चित करेंगे कि कंपाइलर आपके ज्ञात चर प्रकार पर सही अधिभार चुनता है और इसके अलावा यदि वे कोड में कहीं भी उपयोग नहीं किए जाएंगे तो यह उन्हें अनदेखा नहीं करेगा (कुछ अधिभार आपके बाइनरी में लिंक नहीं हो सकते हैं)।
तो अपने विचार यह हो सकता है के आधार पर इस तरह MessageDlgPosHelp
समारोह भार के लिए लग रहा है:
type
TMessageDlgPosHelp1 = function(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer;
const HelpFileName: string): Integer;
TMessageDlgPosHelp2 = function(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer;
const HelpFileName: string; DefaultButton: TMsgDlgBtn): Integer;
procedure TForm1.Button1Click(Sender: TObject);
var
MessageDlgPosHelp1: TMessageDlgPosHelp1;
MessageDlgPosHelp2: TMessageDlgPosHelp2;
begin
MessageDlgPosHelp1 := MessageDlgPosHelp;
MessageDlgPosHelp2 := MessageDlgPosHelp;
ShowMessage(Format('%p; %p', [@MessageDlgPosHelp1, @MessageDlgPosHelp2]));
end;
ओवरलोडेड क्लास विधि का पता प्राप्त करने पर चर्चा की गई है [यहां] (http://stackoverflow.com/questions/10083448/trttimethod-invoke-function-doesnt-work-in-overloaded-methods)। वैसे, मेरे डेल्फी 7 में, MessageDlgPosHelp अधिभारित नहीं है, और यह सिर्फ एक सामान्य कार्य है, विधि नहीं। शब्द "विधि" एक वर्ग के कार्य या प्रक्रिया को संदर्भित करता है। – Hendra
मेरे लिए 'विधि' शब्द का अर्थ संभवतः एक वर्ग का कार्य या प्रक्रिया है। मैंने 'विधि' शब्द के अपने अर्थ को दर्शाने के लिए प्रश्न संपादित किया है। –
मुझे टीलामा के जवाब पसंद हैं (और तदनुसार टिके हैं)। मैंने आरटीटीआई तरीके (जैसे हेन्द्र के लिंक द्वारा सुझाए गए) की तरह कुछ पसंद किया होगा जो डेल्फी के पुराने संस्करण (जो आरटीटीआई बढ़ाया नहीं गया है) के साथ काम करेगा। –