PDA

View Full Version : تعریف یک رویداد در کلاس



o0iman0o
شنبه 25 آذر 1385, 11:54 صبح
با عرض سلام و خسته نباشید خدمت دوستان
بنده میخواهم در یکی از کلاس هایی که با دلفی نوشته ام
یکسری رویداد (Event) تعریف کنم تا هر موقع یکی از آن ها
به وقوع پیوست تعدادی از دستورات مشخص احرا شوند.
----------------------------------------
نا گفته نماند که من دو سه ماهی بیشتر نیست که با دلفی
کار میکنم. با C# به راحتی این کار رو انجام میدم ولی توی دلفی
نمیدونم چه کار کنم.:متفکر:
طبق قوانین سایت اول جستجو کردم اما نتیجه ای بدست نیاوردم.
امیدوارم شما دوستان دلفی کار من رو نا امید نکنید.

ghabil
شنبه 25 آذر 1385, 15:24 عصر
یک مثال میزنم و سعی میکنم همه چیز توش باشه :


type
TOnMyEvent= (AParam: Integer) of object;
....
MyClass = class
..
private
...
FOnMyEvent: TOnMyEvent;
...
public
...
property OnMyEvent: TOnMyEvent read FOnMyEvent write FOnMyEvent;
...
end//of class

حال یک جایی توی کلاس وقتی میخوای Eventرو کال کنی :

if Assigned(FOnMyEvent) then OnMyEvent(4//اون پارامتر عددی)

sara.mahdavi
شنبه 19 مرداد 1392, 07:38 صبح
با سلام
عذر خواهی می کنم بابت اینکه این تاپیک رو زنده کردن
لطفا درمورد تعریف و استفاده از رویدادها بیشتر توضیح بدید
و
اینکه نوع کلاسی که تعریف میکنیم با اضافه شدن رویداد به اون کلاس تغییر میکنه یا نه؟

مثلا :

TMyClass = class(TCustomControl)
نوع کلاسمونه آیا موقعی که میخوایم از رویداد در این کلاس استفاده کنیم باید نوع اون رو عوض کنیم ؟
مثلا :


TMyClass = class(TWinControl)
یا
TMyClass = class(TComponent)


با تشکر:لبخندساده:

sara.mahdavi
یک شنبه 20 مرداد 1392, 13:06 عصر
کسی از دوستان میتونه راهنمایی کنه؟؟؟؟؟؟ لطفا:ناراحت:

یوسف زالی
سه شنبه 22 مرداد 1392, 20:28 عصر
سلام.
برای این که در یک کلاسی که تعریف شده، یک رویداد اضافه کنید، می باید یک کلاس از اون مشتق کنید و در اون زیر کلاس کارهاتون رو اضافه کنید. در حالت کلی درست نیست که کلاس پدر رو دستکاری کنید.
کلا راههای زیر برای تغییر یک کلاس وجود داره:

1- استفاده از زیر کلاس مشتق شده از کلاس مبدا
2- تغییر در سورس کلاس پدر و اضافه کردن رویداد (توصیه نمی شه)
3- هــــک کردن کلاس پدر در یک یونیت
4- استفاده از Class Helper ها

باید ببینید که در کجا دارید چه کار می کنید، کلاس مبدا شما چی هست و سایر موارد.
رویدادی که دارید اضافه می کنید هم مهمه. معمولا رویداد ها در کلاس های بالاتر وجود دارند.
کاری که دارید انجام می دید دقیقا چیه؟

sara.mahdavi
چهارشنبه 23 مرداد 1392, 00:51 صبح
ممنون از جوابتون

دارم روی این موضوع

که در مورد بهترین روش برای ساخت یک پرسشنامه بود یک کلاس می نویسم
می خوام برای یک لیبل و دکمه توی کلاسم رویداد کلیک بذارم و توی اون کد بنویسم که بعد از کلیک کردن اون کد اجرا بشه
ولی با مطالب توی سایت نتونستم چیزی متوجه بشم

اگه بتونید یک مثال در این مورد بزنید ممنون میشم:لبخندساده:

یوسف زالی
چهارشنبه 23 مرداد 1392, 10:22 صبح
شما رویدادی رو به کلاس اضافه نمی کنید. دارید برای یکی از رویداد های یک کلاس، متدی رو انتصاب می دید و این دو با هم خیلی فرق دارن.
در همون آموزش کامپوننت ها هم مثال هایی رو گذاشتم که کاملا گویای این مطلب هست.
فکر می کنم بهتر باشه کمی در مورد OOP تسلط خودتون رو بالاتر ببرید.

اما اجالتا، مثلا برای ساخت یک کلاس که دکمه ی اون رویدادی رو کال می کنه:


unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TMyClass = class(TCustomControl)
private
procedure B1Click(Sender: TObject);
protected
B1: TButton;
public
constructor Create(AOwner: TComponent); override;
end;

implementation

{ TMyClass }

constructor TMyClass.Create(AOwner: TComponent);
begin
inherited;
Width := 300;
Height := 200;
Color := clBlue;

B1 := TButton.Create(Self);
with B1 do
begin
Parent := Self;
Name := 'B1';
SetBounds(1, 1, 100, 60);
OnClick := B1Click;
end;
end;

procedure TMyClass.B1Click(Sender: TObject);
begin
ShowMessage(TButton(Sender).Name + ' has been Clicked');
end;

end.