PDA

View Full Version : نگه داشتن Assignment یک event



A.Nemati
دوشنبه 04 تیر 1386, 17:18 عصر
سلام
آیا راهی هست که بشه فهمید یک event قبلا‌ به چه روالی assign شده و اونو در جایی نگه داشت؟
فرض کنید من یک کلاس دارم که یک event خاص داره. حالا دو کلاس دیگه هستند که می‌خوان از این event رو assign کنن به procedureهای خودشون. وقتی دومین کلاس می‌خواد این کار رو انجام بده، assignment از روی کلاس اول برداشته می‌شه. می‌خوام بتونم بعد از اینکه کار کلاس دوم تموم شد، assignment رو به کلاس اول برگردونم. بنابراین لازم است که بتونم مقدار قبلی اونو جایی نگه دارم، چطوری باید این کار رو انجام بدم.

A.Nemati
سه شنبه 05 تیر 1386, 13:12 عصر
این چندمین باره که سوالی مطرح می‌کنم و هیچ جوابی نمی‌گیرم. آخه یه نفر به من توجه کنه!!!!!!!!!!

vcldeveloper
چهارشنبه 06 تیر 1386, 12:49 عصر
Event شما یک فیلد اشاره گر هست به آدرس یک procedure. قبل از عوض کردن مقدار اون، آدرس procedure قبلی را در یک pointer بریزید، و وقتی کارتون تموم شد، دوباره همون آدرس را به Event مربوطه اختصاص بدید.



procedure TForm1.Button1Click(Sender: TObject);
var
Proc : pointer;
begin
Proc := @Button2.OnClick;
Button2.OnClick := Button2AnotherClick;
Button2.Click;
@Button2.OnClick := Proc;
Button2.Click;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage('Test 1');
end;

procedure TForm1.Button2AnotherClick(Sender: TObject);
begin
ShowMessage('Test 2');
end;

Mahmood_M
چهارشنبه 06 تیر 1386, 14:51 عصر
با تشکر از آقای کشاورز ...

قبل از عوض کردن مقدار اون، آدرس procedure قبلی را در یک pointer بریزید، و وقتی کارتون تموم شد، دوباره همون آدرس را به Event مربوطه اختصاص بدید.

یک سئوال :
آیا Pointer ها بعد از این که چیزی بهشون اختصاص داده شد ، و درواقع کارمون باهاشون تموم شد ! ، باید آزاد بشند ؟ یا حافظه خاصی اشغال نمی کنند ... ؟

با تشکر ...

vcldeveloper
پنج شنبه 07 تیر 1386, 08:25 صبح
آیا Pointer ها بعد از این که چیزی بهشون اختصاص داده شد ، و درواقع کارمون باهاشون تموم شد ! ، باید آزاد بشند ؟خود pointer نیاز به آزاد شدن نداره. صرفا یک عدد 32 بیتی هست که آدرس خانه حافظه را در خودش ذخیره کرده. اما اگر یک pointer به یک شی در حافظه اشاره کرده باشه، و ما نیازی به اون شی نداشته باشیم، باید حافظه اختصاص داده شده به آن شی آزاد بشه.

باید آزاد بشند ؟ یا حافظه خاصی اشغال نمی کنند ... ؟نوع داده pointer به اندازه 4 بایت (32 بیت) در یک سیستم 32 بیتی حافظه اشغال میکنه. همونطور که در بالا هم گفتم، گاهی لازم هست که شما حافظه ایی را که Pointer به آن اشاره می کند، آزاد کنید. خود متغیر pointer نیاز به آزاد کردن ندارد. اگر نمی خواید متغیر شما به خانه حافظه خاصی اشاره کند، بهش مقدار nil بدید.