PDA

View Full Version : تغییر event ها از داخل برنامه



babak869
یک شنبه 01 مهر 1386, 16:04 عصر
دوستان یک سوال ساده که تاحالا بهش برنخورده بودم

چگونه یک event را در جاهای گوناگون تغییر بدهم

مثلا فرض کنیم در یک فرم چند تا Button داریم
می خواهم از یک فرم پارامتر دستور اجرای دگمه رو به اون فرم ارسال کنیم . مثلا از فرم 1 پارامتری ارسال کنیم که دگمه 1 در فرم 2 به این صورت شود :



form2.Button1.OnClick:=.......




procedure TForm2.Button1Click(Sender: TObject);
begin
ShowMessage('my message);
end;



و اگه بخواهیم اون دستور رو از فرم 1 تغییر بدیم کد دگمه فرم 2 بصورت زیر تغییر کنه



procedure TForm2.Button1Click(Sender: TObject);
begin
Application.Terminate;
end;


ممنونم

vcldeveloper
یک شنبه 01 مهر 1386, 16:28 عصر
دو متد با Signature ایی مشابه Event ایی که می خواید، بسازید و کدهای مربوطه را در هر دوی آنها بنویسید. هر زمان لازم شد، یکی از این متدها را به Event مربوطه اختصاص بدید.
یا در داخل کد مربوط به Event مربوطه شرطی بزارید که مشخص کنه در چه زمانی چه کدی باید اجرا بشه.

babak869
یک شنبه 01 مهر 1386, 18:05 عصر
دو متد با Signature ایی مشابه Event ایی که می خواید، بسازید و کدهای مربوطه را در هر دوی آنها بنویسید. هر زمان لازم شد، یکی از این متدها را به Event مربوطه اختصاص بدید.
یا در داخل کد مربوط به Event مربوطه شرطی بزارید که مشخص کنه در چه زمانی چه کدی باید اجرا بشه.

علی جان سلام
دگمه تشکر هم که غیب شده ازت تشکر کنم.
میتونی یه کم بیشتر راهنمایی کنی یا اگه امکان داشته باشه نمونه ش رو بنویسی (خیلی مختصر) . دستت درد نکنه .

Mohammad_Mnt
یک شنبه 01 مهر 1386, 20:09 عصر
procedure Proc1(Sender: TObject);
begin
ShowMessage('my message);
end;

procedure Proc2(Sender: TObject);
begin
Application.Terminate;
end;


حالا هر موقع خواستین :


Form2.MyButton.OnClick := Proc1;

یا


Form2.MyButton.OnClick := Proc2;

Mahmood_M
یک شنبه 01 مهر 1386, 20:49 عصر
سلام
در هر صورت باید کدها رو از قبل نوشته باشید و همونطور که آقای کشاورز گفتند در زمان اجرا اونها را به Event مربوطه اختصاص بدید ...
به عنوان مثال :
فرض کنیم طبق مطالب شما دو تا کد داریم که باید یکی از اونها رو در زمانهایی خاص به Event اختصاص بدیم ، اول هر دو رو تعریف میکنیم :


public
Procedure MyProc1(Sender : TObject);
Procedure MyProc2(Sender : TObject);
{ Public declarations }
...

implementation

Procedure TForm1.MyProc1(Sender : TObject);
begin
Application.Terminate;
end;

Procedure TForm1.MyProc2(Sender : TObject);
begin
MessageBox(Handle, 'Text', 'Caption', MB_OK);
end;

بعد موقعی که میخواید اون رو اختصاص بدید باید یک شرطی بزارید و طبق اون Procedure مورد نیاز رو اختصاص بدید ، به عنوان مثال :


procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if MyVar = True then
BitBtn1.OnClick := MyProc1
else
BitBtn1.OnClick := MyProc2;
end;

نکته مهم که آقای کشاورز هم اشاره کردند ( Signature مشابه ) اینه که باید Procedure شما مثل Event مربوط به BitBtn باشه یعنی عبارت " ( Sender : TObject ) " رو داشته باشه تا به عنوان Procedure به دکمه اختصاص پیدا کنه ...

یک مثال هم آماده کردم که میتونید از اینجا (http://nabegheh.parsaspace.com/SetProcedure.rar) دانلود کنید ...

موفق باشید ...

-------
مثل این که آقا محمد زودتر جواب دادند ، به هر حال پست رو پاک نمیکنم ( حداقل به خاطر مثال )
------