نمایش نتایج 1 تا 4 از 4

نام تاپیک: Class Helper ها در دلفی

  1. #1

    Post Class Helper ها در دلفی

    سلام ؛

    تا به حال چند بار تو این بخش دیدم که دوستان دنبال کامپوننت های آماده ای هستن که کوچکترین نیازشون رو بی دردسر براشون محیا کنه ؛ مثلا تو یکی از تاپیک های که امروز بهش برخوردم و باعث شد این مقاله کوتاه رو بنویسم دوستی نیاز به کامپوننتی شبیه CheckListBox داشت که قابلیت ذخیره کد برای هر آیتم یا ... هم داشته باشه .

    به شخصه همیشه ترجیح میدم ابزارهای مورد نیاز در برنامه هام رو خودم طراحی کنم و از ابزارهای آماده استفاده نکنم مگر پیاده سازی آیتم مورد نیاز پیچیده و زمان بر باشه ؛ در این نوع موارد اگر قصد استفاده مکرر از ابزار طراحی شده باشه بهترین راه ساخت یک کامپوننت از پایه یا مشتق کردن از کلاس های موجود و اضافه کردن آیتم های مورد نیاز هست که برای دوستان تازه وارد سردرگم کننده هست و برای دوستان اهل فن هم اگر با مشکل زمان دست و پنجه نرم کنند استرس زا !

    با توجه به اینکه مطمئن هستم 99% دوستان از Class Helper ها و کاربرد و نحوه کار با اونها هیچ اطلاعاتی ندارند تصمیم گرفتم این مقاله کوتاه رو بنویسم .

    زیادی مقدمه گفتم .. !

    همونطور که از اسم Class Helper ها مشخصه راه حلی برای کمک به کلاس های موجود هستند ! یعنی چی ؟
    یعنی به کمک اونها میتونید پراپرتی و متد به کلاس موجود اضافه کنید و کلاس موجود رو بدون درگیر شدن با مباحث وراثت توسعه بدید .

    مثلا کلاس TEdit رو در نظر بگیرید ؛ میخواهیم تابعی به این کلاس اضافه کنیم که بررسی کنه ببینه داخل متن وارد شده ( Text ) کارکتر عددی هست یا نه ، خوب این کار به راحتی با استفاده از Class Helper ها قابل پیاده سازی هست :

    type
    TEditNumberCheckHelper = class Helper for TEdit
    public
    function IsNumericCharInText: Boolean;
    end;


    در کد فوق Class Helper ی با نام TEditNumberCheckHelper برای کلاس TEdit تعریف شده که تابع IsNumericCharInText رو به کلاس TEdit اضافه میکنه .

    توجه کنید که نمیتونید شیئتون رو از کلاس TEditNumberCheckHelper مشتق کنید و بسازید ، TEditNumberCheckHelper یک Class Helper هست و تغییرات رو روی کلاس اصلی مورد نظر ما ( در اینجا TEdit ) اعمال میکنه و اون رو توسعه میده .

    پس با این توضیحات تمام کنترل های مشتق شده از TEdit دارای تابعی با نام IsNumericCharInText هستند !

    حالا تابع IsNumericCharInText رو به صورت زیر تعریف میکنیم :

    function TEditNumberCheckHelper.IsNumericCharInText: Boolean;
    var
    Ch: Char;
    begin
    Result := False;
    // Check text for numeric charecter
    for Ch in Text do
    if Ch in ['0' .. '9'] then
    Exit(True);
    end;


    به همین سادگی ؛ حالا یک شئ Edit روی فرمتون بزارید و تو یک دکمه کد زیر رو بنویسید و نتیجه رو ببینید :

      if Edit1.IsNumericCharInText then
    ShowMessage('The text contain numeric charecter');


    به همین شیوه میشه موارد مورد نیاز و یک بار مصرف رو بدون درگیر شدن با جزئیات و پیاده سازی های پیچیده و وراثت پیاده سازی کرد .

    در آخر دقت کنید که در Class Helper ها امکان تعریف فیلد وجود نداره و اگر تصمیم به این کار داشتید فیلد ها رو باید از نوع Class Var تعریف کنید :

    با این حساب کد زیر کامپایل نخواهد شد :

    type
    TEditNumberCheckHelper = class Helper for TEdit
    public
    fField: Boolean;
    function IsNumericCharInText: Boolean;
    end;


    و راه حل :

    type
    TEditNumberCheckHelper = class Helper for TEdit
    public
    class var fField: Boolean;
    function IsNumericCharInText: Boolean;
    end;


    در ضمن با استفاده از Class Helper ها میتونید رفتار Property ها و متدهای موجود در کلاس پایه مورد نظر رو هم تغییر بدید .

    موفق باشید .

  2. #2

    نقل قول: record Helper ها در دلفی

    سلام
    در ادامه توضیحات آقا ماهان باید عرض کنم که ما در دلفی می توانیم از record helper هم استفاده کنیم که مثالی را در این رابطه در زیر قرار داده ام.
    از آنجایی که این کد با داده های پایه کار می کند شما حداقل باید از Delphi XE3 استفاده کنید. به عبارت دیگر record helper برای کار با داده های پایه یکی از ویژگی هایی است که به RTL مربوط به Delphi XE3 اضافه شده است:
    type
    TIntegerHelper = record helper for Integer
    function ToString: string;
    end;

    // ...

    implementation

    // ...

    function TIntegerHelper.ToString: string;
    begin
    Result := System.SysUtils.IntToStr(Self)
    end;

    procedure TForm4.Button1Click(Sender: TObject);
    var
    I: Integer;
    begin
    I := Random(100);
    caption := I.ToString;
    end;
    آخرین ویرایش به وسیله بهروز عباسی : سه شنبه 29 مرداد 1392 در 15:30 عصر

  3. #3
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    تهران
    پست
    360

    نقل قول: Class Helper ها در دلفی

    با سلام
    برای یک کلاس میشود چندتا Class Helper تعریف کرد.
    من ّبرای Tedit دو تا Class Helper تعریف کردم ولی یک از آنها در Property اضافه میشود.

  4. #4

    نقل قول: Class Helper ها در دلفی

    برای یک کلاس فقط یک Class Helper میتونید تعریف کنید .

تاپیک های مشابه

  1. ساخت سیستم عامل با دلفی
    نوشته شده توسط amin_omega در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 20
    آخرین پست: سه شنبه 12 بهمن 1400, 12:38 عصر
  2. Class Helper در دلفی
    نوشته شده توسط مصطفی ساتکی در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 2
    آخرین پست: دوشنبه 24 خرداد 1389, 02:05 صبح
  3. فارسی نوشتن در دلفی
    نوشته شده توسط (امید) در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 11
    آخرین پست: چهارشنبه 18 بهمن 1385, 08:56 صبح
  4. class نویسی در دلفی
    نوشته شده توسط Future در بخش برنامه نویسی در Delphi
    پاسخ: 1
    آخرین پست: سه شنبه 22 شهریور 1384, 13:45 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •