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

نام تاپیک: ساخت کامپوننت VCL به زبان ساده

Hybrid View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1

    نقل قول: ساخت کامپوننت VCL به زبان ساده

    رویداد ها در کامپوننت
    -----------------------
    این جلسه در مورد رویداد ها صحبت می کنم.

    رویداد ها چیزی جز نگهدارنده ی آدرس یک متد نیستند.
    رویداد در حقیقت مثل یک متغیر از نوع پروسیجر است که در مواقعی تصمیم می گیریم اون رو کال کنیم.
    این مثال رو ببینید:

    var
    x: procedure(Sender: TObject);

    procedure Proc1(Sender: TObject);
    begin
    ShowMessage('Proc1 for ' + Sender.ClassName);
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    x := Proc1;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    x(Sender);
    end;


    در اینجا x یک نگه دارنده آدرس پروسیجر است.

    نکته:
    برای ایجاد یکی از همین نگه دارنده ها در Property حتما باید نوع اون متد باشه، یعنی این که پروسیجری از یک شی باشه.

    مثال:

    x: procedure(Sender: TObject) of Object;


    یا حتی:

    x: TNotifyEvent;


    خب، اگر همین متغیر رو به عنوان یک خصیصه در یک کلاس بگذاریم، یعنی یک رویداد درست کردیم!

    همین!

    فقط باید تحت شرایطی اون رو کال کنیم.
    برای کال کردن اون هم باید قبلش تست کنیم ببینیم این متغیر آدرسی رو در خودش نگه داشته یا نه.

    ببینید،
    وقتی روی یک فرم یک دکمه می گذارید و روش کلیک می کنید تا رویداد OnClick براتون ایجاد بشه، در حقیقت در DFM یک انتصاب برای یک متغیر رویداد انجام می شه.
    می تونید این رویه رو با View as Text فرم مشاهده کنید.

    توصیه مهم:
    وقتی یک رویداد درست می کنید برای جلوگیری از تکرار و نیز برای کنترل روی رویداد در کلاس های مشتق شده، لازمه که یک پروسیجر در قسمت Protected اضافه کنید که Virtual (یا Dynamic) باشه.
    درون این پروسیجر تست انتصاب برای رویداد و کارهای لازمه رو انجام می دید. هر کجا لازمه این پروسیجر رو کال می کنید. در کلاس های مشتق شده هم دستتون بازه که رفتار اون رو اصلاح کنید.

    در همین مثال که زده شد، رویداد OnTick رو ببینید.

    procedure DoTick(Sender: TObject); virtual;

    .
    .


    property OnTick: TNotifyEvent read FOnTick write FOnTick;


    ببینید در کجا کال می شه:

    FTimer.OnTimer := DoTick;


    این یعنی هروقت تایمر رویدادش اتفاق افتاد رویداد ما رو جاش بگذار.
    و چگونه رویداد ران می شه:

    .
    .
    if Assigned(FOnTick) then
    FOnTick(Self);

    یک مثال دیگه رو ببینیم. می خواهیم ببینیم که رویداد OnDropDown شی ComboBox کی کال می شه و چطور می تونیم کارکردش رو در یک کلاس مشتق شده عوض کنیم.

    - یک کمبوباکس روی فرم بگذارید.
    - با کنترل کلیک روی تعریف اون یعنی TComboBox به تعریف اون برید.
    - همون طور که می بینید فقط میدان دید خصیصه ها افزایش داشته. پس همین خصیصه رو باید در یکی از کلاس های بالاتر دنبال کنیم.
    - روی TCustomComboBox هم کنترل کلیک
    - در اینجا خبری ازش نیست. پس از کلاس بالاتر یعنی TCustomCombo
    - رویداد مورد نظر همین جاست. دنبال نگه دارنده ی این رویداد یعنی FOnDropDown می گردیم.
    - در متد DropDown یک مورد پیدا می شه. با کلید های Shift Ctrl ArrowUp به اعلان این پروسیجر می ریم.
    - همون طور که می بینید در Protected و از نوع Dynamic تعریف شده.
    - از این به بعدش خیلی مهم نیست، خود کلاس می دونه چه موقع این رویداد رو از طریق این متد کال کنه. کافیه در کلاس مشتق شده این متد رو OverRide کنید و به جای کاری که پیش فرض انجام می شه، هنگام اتفاق افتادن DropDown کاری رو که دوست دارید انجام بدید.

    فعلا تا جلسه ی بعدی خدانگهدار.
    آخرین ویرایش به وسیله یوسف زالی : چهارشنبه 18 اردیبهشت 1392 در 10:29 صبح
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840
    پایگاه داده، تیونینگ، طراحی و پیاده سازی ..

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

  1. ساخت تلفن گویا به زبان ساده
    نوشته شده توسط soheil_1367 در بخش C#‎‎
    پاسخ: 90
    آخرین پست: جمعه 04 مرداد 1392, 09:30 صبح
  2. ساخت کامپوننت در دلفی
    نوشته شده توسط ramin_rp در بخش کامپوننت های سایر شرکت ها، و توسعه کامپوننت
    پاسخ: 12
    آخرین پست: چهارشنبه 27 شهریور 1387, 18:24 عصر
  3. سی دی آموزشی VB6 به زبان فارسی ، ساخت و تولید dll ، activex , class به زبان ساده ...
    نوشته شده توسط mkbo_webmaster در بخش برنامه نویسی در 6 VB
    پاسخ: 2
    آخرین پست: دوشنبه 21 فروردین 1385, 01:17 صبح

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

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