PDA

View Full Version : چگونه ایجاد فرم های مادر و فرزند ؟



Ali-Far
چهارشنبه 17 اسفند 1384, 12:04 عصر
سلام.
من تو دلفی با استفاده از خاصیت FormStyle فرم های از نوع مادر (fsMDIFORM ) و فرم های
فرزند( fsMDIChild ) ایجاد کردم ولی وقتی که برنامه اجرا می شود تمام فرم های فرزند نمایش
داده می شود و وقتی که فرم را Close می کنم فرم بصورت MiniMize می شود .
حالا من میخوام در هنگام اجرا فقط فرم مادر نمایش داده شود و وقتی از منو گزینه ی انتخاب
شود فرم مربوطه بصورت فرزند در داخل فرم مادر نمایش داده شده و با Colse کردن نیز بسته شود
( تمام کلیدهای Close ,Minimize, Maximize کار اصلی خودشان را انجم دهند ).

با تشکر.

Touska
چهارشنبه 17 اسفند 1384, 12:41 عصر
قبل از اینکه سئوال بپرسید در سایت جستجو کنید.

جواب اینکه شما باید فرمهای فرزند خود را از نوع Avalibale from بذارید و خودتون دستی Create کنید.

و برای بسته شدن در Onclose از این کد استفاده نمایید :


Action := Cafree;

Ali-Far
چهارشنبه 17 اسفند 1384, 16:00 عصر
سلام.
من از شما به خاطر راهنمای و تذکری که دادید تشکر می کنم . ولی من الان یک مشکلی دارم
اینکه کد ( Form2 := Tform2.creat(application را کجا اضافه کنم .
البته من این کد را در صفحه ی اصلی داخل یک کلید اضافه کردم(و در قسمت یونیت Project
(Application.Creatform(Tform2,Form2 را کامنت کردم )حالا وقتی فرم را Maximize می کنم با فرم اصلی یکی می شود و کلیدهای فرم پسر قابل رویت نیست .

Ehsansh
چهارشنبه 17 اسفند 1384, 16:31 عصر
من زمانی این مشکل رو داشتم. با فریم کار کردم خیلی راحت مشکلم حل شد.
مزیت های زیادی داره فریم.
یکی اینکه میتونی در زمان اجرا Transparent کنی و زمینه فریم میشه زمینه فرمت.
اگه خواستی و دیدی به دردت میخوره بگو تا بنویسم.
موفق باشی.

Ali-Far
پنج شنبه 18 اسفند 1384, 00:07 صبح
سلام.
من برنامه را با همان روش قبلی تست کردم ولی تو برنامه خطای آدرسی می دهد .
حالا اگه شما کدها را بنویسید ممنون می شوم .
باسپاس

Sabeghi
پنج شنبه 18 اسفند 1384, 07:05 صبح
دوست عزیز توسکا میشه بیشتر توضیح بدهید
با ذکر مثال
با تشکر

Touska
پنج شنبه 18 اسفند 1384, 07:26 صبح
توضیحات ندارم و مثال : :لبخند:

Ali-Far
شنبه 20 اسفند 1384, 11:44 صبح
سلام.
خیلی ممنون از راهنمایی دوست عزیز توسکا.
من برنامه را تست کردم ولی طبق اون مثالی که گذاشتید هر بار که کلید را فشار می دهیم یک فرم جدید ایجاد می کنه . حالا من میخوام که اگه همون فرم در صفحه وجود داره و زیر بقیه ی فرم هاست فقط دوباره اون را نشون بده نه دوباره ایجاد کنه.
من متد Show را هم تست کردم ولی Error آدرسی داد.
با تشکر .

Touska
شنبه 20 اسفند 1384, 12:06 عصر
شما باید برای هر فرمی یک اسم بذارید و وقتی می خواهید آن را نمایش بدهید اول چک کنید

که آن فرم وجود دارد یا نه که اگر نه بسازید و اگر بله آن را Show کنید.

می تونید بوسیله FindGlobalCompoent یا FindComponent بودن آنها را چک کنید.

راه دیگر هم از طریق Assign هست.

موفق باشید :)

Sabeghi
سه شنبه 23 اسفند 1384, 06:35 صبح
توسکا جان
میشه زحمت این قسمت رو هم خود شما بکشی و کدش رو بنویسی

Sabeghi
چهارشنبه 24 اسفند 1384, 09:16 صبح
جناب توسکا با سلام

نقل قول :
{ شما باید برای هر فرمی یک اسم بذارید و وقتی می خواهید آن را نمایش بدهید اول چک کنید که آن فرم وجود دارد یا نه که اگر نه بسازید و اگر بله آن را Show کنید.
می تونید بوسیله FindGlobalCompoent یا FindComponent بودن آنها را چک کنید.
راه دیگر هم از طریق Assign هست }

میشه زحمت بکشید و در رابطه با نحوه استفاده از دستورات :
FindGlobalCompoent یا FindComponent
و
Assign
توضیح بیشتری بدهید.
ترجیحا با مثال باشد ممنون میشم
با تشکر

Touska
پنج شنبه 25 اسفند 1384, 13:44 عصر
IF FindGlobalComponent('Form1') <> Nil Then
Begin
//Do Some things code
End;
موفق باشید ;)

Sabeghi
جمعه 26 اسفند 1384, 04:58 صبح
procedure TForm1.New1Click(Sender: TObject);
Var
Child : TForm2;
begin
IF FindGlobalComponent('Form2') = Nil Then
Child := TForm2.Create(Self);
Child.Show
end;

من این کد رو طبقه گفته شما نوشتم اما بعد از کلیک اول و ایجاد فرم در کلیک دوم خطا میزنه

Touska
جمعه 26 اسفند 1384, 18:04 عصر
شما باید بگید اسم فرم چیست :


procedure TForm1.New1Click(Sender: TObject);
Var
Child : TForm2;
begin
IF FindGlobalComponent('Form2') = Nil Then
Begin
Child := TForm2.Create(Application);
Child.Name := 'Form2';
Child.Show;
End
Else
Begin
Child.Show;
End;
end;

mohsenrahx
یک شنبه 17 دی 1391, 23:35 عصر
سلام بر شما و با تشکر از گفتگو های شما که مفید واقع شد.
توسکای عزیر و اساتید محترم. من همین کارا رو انجام دادم بعضی از مشکلاتم رفع شد و اما زمانی که با کلیک بر باتونی روی فرم اصلی کد بالا رو برای نمایش فرم دوم یعنی فرم فرزند فراخوانی می کنم ارور خطا در آدرس دهی رو می ده اما با این حال فرم دوم رو باز می کنه.

چه کنیم؟

mohsenrahx
دوشنبه 18 دی 1391, 14:06 عصر
بزارید سوالم رو دقیق تر بپرسم.
من دو تا فرم دارم که یکی مادر و دیگری فرزند هست.
و یک فرم دیتا مودل. که جمعا 3 فرم می شود.
فرم مادر باز می شود بدون هیچ اروری با دستوری که توسکای عزیز در آخرین پیغامش کذاشته فرم فرزند رو باز می کنم و ارور ادرس می دهد. حالا کد رو دقیق نگاه کردم در فرم دوم یعنی فرم فرزند زمانی که Create می کنم چند کار انجام می شود.
DM1.Adotable1.Open;
DM1.Adotable2.Open;
تا اینجا کد راحت اجرا می شود اما در ادامه کد داریم
SearchS.DBGrid1.SetFocus;
SearchS.ShowInfoClick(Sender);
همین جا ارور ادرس می ده. حالا لطف کنبد نظرتون رو در این خصوص بفرمایید.
هم موقع ست فوکا هم موقع فراخوان یک باتون که توی باتون ShowInfo چند کد نوشته شده که وقتی به خط زیر میرسه ارور می ده
BigNumber:=DM1.Adotable1.FieldByName('id').AsStrin g;