PDA

View Full Version : بستن فرمهای MDIChild



farhad110
پنج شنبه 11 بهمن 1386, 13:17 عصر
سلام. تا اونجایی که از نتایج جستجو متوجه شدم فرمهای mdi رو نمیشه به صورت modal نمایش داد. آیا راهی هست که مشخص شه چه فرمهایی در حال نمایش هستند و اونها رو close کرد؟تشکر

Amir_Safideh
پنج شنبه 11 بهمن 1386, 18:04 عصر
این رو امتحان کن :


For I := MDIChildCount-1 downTo 0 do
begin
if MDIChildren[i].Name = 'Child1' then
MDIChildren[i].Free;
end;


فقط همونطور که میدونی به جای Child1 که من نوشتم شما باید اسم فرمی رو که میخوای بسته بشه رو بنویس.

farhad110
پنج شنبه 11 بهمن 1386, 20:54 عصر
سلام و تشکر فراوان
فقط اگر قرار باشه که بدون قید و شرط همه فرمها رو ببنده:

For I := MDIChildCount-1 downTo 0 do
begin
MDIChildren[i].Free;
end;
مر30

Amir_Safideh
جمعه 12 بهمن 1386, 12:58 عصر
بله دقیقا همین کد این کار رو برات انجام میده .
یه کد دیگه که حتما لازمت میشه و کمکت میکنه یه پنجره MDIChild رو که در زیر چندین پنجره دیگه قرار گرفته رو به عنوان پنجره فعال روی پنجره های دیگه قرار بدی :


for I := MDIChildCount-1 downTo 0 do
begin
if MDIChildren[i].Name = 'Child1' then
MDIChildren[i].BringToFront;
end;

farhad110
شنبه 13 بهمن 1386, 09:38 صبح
یک سوال دیگه در رابطه با بستن فرم های MDI:اگر بخوام دقیقا onclose هر فرم اجرا شه باید چیکار کنم؟با MDIChildren[i].Free فرم بسته میشه اما کدهایی که برای onclose نوشتم اجرا نمیشه

vcldeveloper
یک شنبه 14 بهمن 1386, 02:31 صبح
یک سوال دیگه در رابطه با بستن فرم های MDI:اگر بخوام دقیقا onclose هر فرم اجرا شه باید چیکار کنم؟با MDIChildren[i].Free فرم بسته میشه اما کدهایی که برای onclose نوشتم اجرا نمیشه

قبل از Free اون فرم رو Close کنید. اگر نمی خواید این کار رو انجام بدید، کد مربوطه رو در OnDestroy بنویسید که قبل از Free کردن شی اجرا میشه.

farhad110
یک شنبه 14 بهمن 1386, 10:17 صبح
قبل از Free اون فرم رو Close کنید
ارور معروف access ... رو داد

کد مربوطه رو در OnDestroy بنویسید که قبل از Free کردن شی اجرا میشه
درست شد. فقط فرق close رو با destroy میخوام؟ تفاوتشون در اولویت اجرا هست؟

vcldeveloper
یک شنبه 14 بهمن 1386, 10:44 صبح
درست شد. فقط فرق close رو با destroy میخوام؟ تفاوتشون در اولویت اجرا هست؟
Close فقط فرم رو مخفی میکنه، Destroy شی مربوط به فرم رو آزاد میکنه. شما مستقیما از Destroy استفاده نمی کنید، بلکه Free را فراخوانی می کنید که اجرای آن منجر به فراخوانی Destroy میشه. رویداد OnDestroy هم درست قبل از اجرای متد Destroy صورت میگیره.

farhad110
یک شنبه 14 بهمن 1386, 11:00 صبح
اگر به جای free از form.destroy استفاده کنم چطور؟ اصلا چرا این دو method هست؟

rasool_brn
دوشنبه 15 بهمن 1386, 09:24 صبح
اگر به جای free از form.destroy استفاده کنم چطور؟ اصلا چرا این دو method هست؟متد Free بررسی می کنه که شیء جاری ( Self ) قبل از فراخوانی nil , Destroy نباشه . اگه شیء nil باشه و متد Destroy رو فراخوانی کنین برنامه پیام خطای نقص دستیابی به حافظه رو می ده.