PDA

View Full Version : توضیح در مورد این تابع



حمیدرضاصادقیان
دوشنبه 17 دی 1386, 22:17 عصر
سلام دوستان.اگر میشه درمورد کد زیر توضیح بدید و اینکه تو چه مسائلی بیشتر بدرد می خورند.


type
TOnDebugLine = Procedure (Sender: TObject; const Line: String; var Discard: Boolean) of Object; // Set Discard to false if output should still go to ordinary debug log
TGetPluralForm=function (Number:Longint):Integer;
TDebugLogger=procedure (line: ansistring) of object;

rasool_brn
سه شنبه 18 دی 1386, 01:10 صبح
این تکه کد دو نوع داده مختلف رو تعریف می کنه :1 - نوع نشانه رو تابع 2 - نوع نشانه رو متد
یه متغیر از نوع نشانه رو تابع , نشانی تابعی رو ذخیره می کنه که فرا خوانده می شه و البته اون تابع باید پارامترهایی همسان با نوع تعریف شده داشته باشه.
نوع نشانه رو متد هم مثل نوع نشانه رو تابع هست با این تفاوت که به یه متد اشاره می کنه . هر متغیر از نوع نشانه رو متد دو نشانی رو ذخیره می کنه : نشانی متن متد و نشانی شی در حافظه .این نوع داده پارامتر Self رو به طور پنهان مقدار دهی می کنه و از طریق اون به شی درون حافظه دستری داره.
نوعهای داده ای که در انتهای اونا عبارت of object وجود داره نوع نشانه رو متد هستن. نوع نشانه رو متد بیشتر در روال پاسخگویی به رویدادها کاربرد داره.

حمیدرضاصادقیان
سه شنبه 18 دی 1386, 07:34 صبح
ممنون.یعنی این تابع و متد بیشتر برای طراحی کامپوننتها استفاده میشه؟ اصلا لزومی داره که تابع و متدی رو که عادی تعریف میکنیم به این صورت تعریف کنیم؟

rasool_brn
سه شنبه 18 دی 1386, 09:57 صبح
اینها تابع و متد نیستند . به عبارت Type در بالای کدتون توجه کنین . اینها نوع داده ای هستن که متغیرهایی از نوع اونا می تونین به یه تابع یا متد اشاره کنن .برای پی بردن به ضرورت این نوع داده ها کد زیر رو ببینین , VCL تقریبا از یه همچین کدی برای تعریف رویداد OnClick استفاده می کنه:
type
TNotifyEvent=Procedure (Sender: TObject) of object;
TButton=class
fOcClick:TNotifyEvent;
property OnClick: TNotifyEvent read FOnClick write FOnClick ;
end;


var
Form1: TForm1;حالا کد زیر رو می تونین تو یه پروسیجر بنویسین:
Button1.OnClick:=Form1.button1Click;مفید بودن این کار هم در اینه که شما الان می تونین متد هر کلاسی رو به رویداد OnClick جز Button نسبت بدین که در کد بالا متد کلاس TForm1 رو بهش نسبت دادیم یعنی کاری که دلفی انجام می ده.
توجه : اگه همچین نوع داده ای تعریف نمی شد برای پاسخ دادن به رویداد OnClick جزء Button باید کلاس پایه TControl رو دستکاری می کردیم . یعنی باید یک متد در کلاس TControl برای پاسخ دادن به این رویداد تعریف می کردیم.