ورود

View Full Version : Can not create form. No MDI forms are currently active



mohsenrahx
چهارشنبه 21 آذر 1386, 23:06 عصر
سلام
من در برنامه ای که نوشتم یک فرم مادر(Form1) دارم که خاصیت formstyle اون fsMDIForm است و دو فرم دیگر(form2,form3) دارم که خاصیت formstyle آن fsMDIChild است .
در سربرگ poroject گزینه option را انتخاب می کنم. و در قسمت mainform ، فرم مادر را به برنامه معرفی می کنم یعنی mainform من ، form1 می باشد. و دو فرم دیگر را (form2,form3) در قسمت Available Form قرار می دهم.
دو باتون روی فرم مادر (form1) می گزارم که باتون اول فرم 2 و باتون دوم فرم 3 را نمایش می دهد.(چطور نمایش می دهد؟) من برای نمایش فرم های فرزند از این تابع استفاده می کنم.




[procedure MainFormCreateChildForm(chi:smallint);
var ChildForm2: TForm2;
ChildForm3: TForm3;
begin
if chi=1 then
Childform2 := TForm2.Create(Application);
if chi=2 then
ChildForm3 := TForm3.Create(Application);
end;


و در باتون اول می نویسم


MainFormCreateChildForm(1);

و در باتون دوم می نویسم


MainFormCreateChildForm(2);



خوب کدا درست کار می کنند و مشکلی باهاشون ندارم . (یعنی هر باتون را کلیک می کنم، فرم موبوط به خود را به درستی نمایش می دهد) اما و قتی که یک فرم به نام رمز عبور را ایجاد می کنم و اونو در قسمت poroject گزینه option به عنوان mainform انتخاب می کنم( تا اول اون در هنگام اجرای برنامه بالا بیاد) و در قسمت باتونی که روی فرم رمز وجود دارد می نویسم که اگر پسورد درست بود فرم یک من که همون فرم مادر بود نمایش داده بشه (form1.show) . خوب تا اینجا اگر برنامه را اجرا کنم و پسورد درست باشد فرم مادر نمایش داده می شود.
مشکل اینجاست اگر یادتون باشه من دو تا باتون داشتم که روی فرم مادر بود و با فراخوانی تابعی که در فرم مادر بود فرم 2 و 3 نمایش داده می شد هنگامی که (بعد از عبور از فرم پسورد و نمایش فرم مادر) این دو باتون را کلیک می کنم این ارور (Eror) را می دهد.


Can not create form. No MDI forms are currently active




با تشکر محسن

rasool_brn
پنج شنبه 22 آذر 1386, 01:27 صبح
دلیلش اینه که شما فرم رمز عبور رو به عنوان MainForm در نظر می گیری , در این صورت دیگه نمی تونی مقدار fsMDIForm رو به خاصیت ّFormStyle فرم دوم (فرمی که Buttonها روش هست)بدی.
توجه کن فقط فرمی می تونه fsMDIForm باشه که به عنوان MainForm انتخاب می شه .

mohsenrahx
شنبه 24 آذر 1386, 11:37 صبح
سلام
ممنون از جوابت
اما من می خواهم که هنگام لود برنامه فرم رمز عبور نشان داده شود و اگر رمز درست بود فرم اصلی نشان داده بشه حالا به توجه به اون چیزایی که توضیح دادم میشه بگی چه کدی بنویسم.

vcldeveloper
شنبه 24 آذر 1386, 15:25 عصر
اما من می خواهم که هنگام لود برنامه فرم رمز عبور نشان داده شود و اگر رمز درست بود فرم اصلی نشان داده بشه حالا به توجه به اون چیزایی که توضیح دادم میشه بگی چه کدی بنویسم.
در سورس پروژه (فایل DPR)، بعد از Create شدن فرم اصلی بنویس:

Application.ShowMainForm := False;

dkhatibi
یک شنبه 25 آذر 1386, 07:11 صبح
می تونی فرمها را معمولی درنظر بگیری و در رویداد ONShow فرم اصلی فرم پسورد را ShowModal کنید.