PDA

View Full Version : main and Child forms



fazel-d
دوشنبه 13 اسفند 1386, 19:05 عصر
من اول form1 رو به صورت mainform در آوردم که وقتی برنامه اجرا میشه اول همین فرم نشان داده میشه .
بعد یه فرم دیگه به نامform2 رو ایجاد کردم که یه دکمه داره به نام btn2
form1 هم یک دکمه داره به نام btn1با زدن آن دکمه .. form2به صورت show شده وform1 مخفی میشهحال می خوام وقتی که بر روی دکمهbtn2 کلیک کردم form1به صورت childبرایform2 تلقی بشه تا با زدن دکمه X (بستن فرم ) بر روی فرم 1 تنها همان form1 بسته بشه نه کل برنامه .امیدوارم منظورم را فهمیده باشید

rasool_brn
دوشنبه 13 اسفند 1386, 23:35 عصر
من اول form1 رو به صورت mainform در آوردم که وقتی برنامه اجرا میشه اول همین فرم نشان داده میشه .
بعد یه فرم دیگه به نامform2 رو ایجاد کردم که یه دکمه داره به نام btn2
form1 هم یک دکمه داره به نام btn1با زدن آن دکمه .. form2به صورت show شده وform1 مخفی میشهحال می خوام وقتی که بر روی دکمهbtn2 کلیک کردم form1به صورت childبرایform2 تلقی بشه تا با زدن دکمه X (بستن فرم ) بر روی فرم 1 تنها همان form1 بسته بشه نه کل برنامه .امیدوارم منظورم را فهمیده باشید
mainform یه خصوصت فقط خواندنیه ، نمی تونی وسط برنامه form2 رو به خصوصیت mainform شی Application نصبت بدی(فقط فرمی می تونه به عنوان فرم قاب در نظر گرفته بشه که mainform باشه)

SYNDROME
سه شنبه 14 اسفند 1386, 07:29 صبح
در ادامه صحبتهای دوستمان بگویم :
فرم اصلی برنامه را که نباید در وسط برنامه عوض کرد .
شما همان فرم 1 را Main بگیرید و بقیه فرمها را Child و برای بستن کل برنامه اول همه Childها را ببنید و بعد Main را که منطقی تر است.
موفق باشید

fazel-d
جمعه 17 اسفند 1386, 20:05 عصر
خوب به قول شما اگر که من بخوام form2 رو به عنوان mainform قرار بدم در نتیجه form2 هنگام اجرا اول لود میشه. حالا چه کدی رو در فرم2 بنویسم که با توجه به اینکه فرم2 به صورت مین فرم هست ولی فرم1 در اول لود بشه و با زدن X ( بستن فرم 1 ) کل برنامه halt نشه؟

mrm0101
جمعه 17 اسفند 1386, 20:17 عصر
راه اول : برای اینکه فرم دوم رو فرم اصلی پروژه قرار بدید . در قسمت project/option شما mainform را فرم دوم قرار دهید .

راه دوم . وقتی فرم دوم را فراخوانی می کنید

Form2.ShowModal;
Form1.Hide;


به این ترتیب فرم اول مخفی می شود . برای خروج از برنامه با کلیک بر روی دکمه خروج در فرم دوم این کد رو بنویسید


Form2.Close;
Form1.Close;

rasool_brn
شنبه 18 اسفند 1386, 10:37 صبح
mainform فرمی که با متد Createform شی Application ایجاد می شه ، اگه می خوایین فرمی غیر از mainform قبل از همه اجرا بشه فایل متن پروژه تون رو به این شکل تغییر بدین:
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
Application.Initialize;
form1:=TForm1.Create(Application);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.

vcldeveloper
شنبه 18 اسفند 1386, 11:06 صبح
mainform فرمی که با متد Createform شی Application ایجاد می شه ،
این ربطی به مشکل ذکر شده نداره. CreateForm هم برای ایجاد Main Form استفاده نمیشه، بلکه برای ایجاد هر فرمی کاربرد داره.
Main Form = اولین فرمی که در فایل DPR ساخته میشه. در نتیجه در زمان اجرای برنامه قابل تغییر نیست.

ParsaNM
شنبه 18 اسفند 1386, 12:48 عصر
من نمی دونم واقعا چه احتیاجی به انجام این کار داری ولی اگر می خوای این کار رو بکنی باید در Form1.CloseQuery خاصیت CanClose رو False کنی و Application.ShowMainForm رو برابر False می ذاری اینجوری وقتی فرم 1 رو می بندی Hide می شده ولی برای بستن برنامه باید Form1 یا همون MainForm رو ببندی خاصیت MainForm رو می تونی اینجوری هم بدست بیاری Application.MainForm. امیدوارم مشکلت حل بشه ... البته اگر می خوای Wizard بسازی این راهش نیست...!

rasool_brn
شنبه 18 اسفند 1386, 15:26 عصر
این ربطی به مشکل ذکر شده نداره. CreateForm هم برای ایجاد Main Form استفاده نمیشه، بلکه برای ایجاد هر فرمی کاربرد داره.
Main Form = اولین فرمی که در فایل DPR ساخته میشه. در نتیجه در زمان اجرای برنامه قابل تغییر نیست.من یک کلمه رو جا گذاشتم: MainForm اولین فرمی که با متد CreateForm شی Application ایجاد می شه.البته در فایل متن پروژه.
ربطشم می تونید در تکه کدی که من نوشتم ببنید. اولین فرمی که ایجاد می شه لزوما MainForm نیست.در تکه کدی که من گذاشتم Form1 اول از یمه ساخته می شه ولی MainForm نیست.

fazel-d
شنبه 18 اسفند 1386, 20:03 عصر
پروژه رو در زیر قرار می دم اینطوری کمک بهتری در پاسخ شما دوستان می کنه.
بعد اینکه توضیحی که باید بدم اینه که :
می خوام ابتدا فرم child نمایش داده بشه .بعد وقتی بر روی دکمه نمایش main کلیک شد / فرم main به نمایش در بیاد.و خوده فرم child یا مخفی بشه یا بسته .
و وقتی که بر روی دکمه نمایش child در فرم main کلیک شد فرم child بر روی فرم main به نمایش در بیاد / حالا سوال اینجاست ؟
اگر که در فرم child که بر روی فرم main به نمایش در اومده و بر روی دکمه X (همون بستن پنجره فرم child ) زده شد تنها همون فرم child بسته بشه / نه کله برنامه.

ParsaNM
یک شنبه 19 اسفند 1386, 16:27 عصر
برنامه ات رو اصلاح کردم ... ببین همونیه که می خوای...

fazel-d
پنج شنبه 23 اسفند 1386, 21:30 عصر
ممنون از ParsaNM و دیگر دوستان
ParsaNM یه بار گفته بودی ولی من متوجه نشدم که چی میگی
ولی جای تشکر باقیست !