PDA

View Full Version : مشکل در ShowModal



samprp
یک شنبه 25 فروردین 1387, 19:51 عصر
سلام دوستان
تو فرم اصلی یه دکمه دارم که باعث می شه یه فرم دیگه (فرم یک) رو به حالت ShowModal باز کنه .
تو اون فرم هم یه دکمه دارم که باید یه فرم دیگه (فرم دو) رو به صورت ShowModal باز کنه.

حالا من تو فرم اصلی دکمه رو می زنم تا فرم یک ظاهر بشه (شوم مودال).
بعد اون فرم هم دکمه رو می زنم تا فرم دو شومدال بشه . خب تا اینجا درسته.

حالا تو فرم دو من یه دکمه دارم که فرم یک رو باید شو مدال کنه . ولی وقتی می زنم خطا می ده اینم خطاش :
'Cannot make a visible window modal'

مثل اینکه زیادی پیچیدش کردم .

"فرم اصلی" >>>>>>> "فرم یک" >>>>>>>>> "فرم دو"
. .....................................\/ ............................. /\
. .................................... \/.............................. /\
...................................... <<<<<<<<<<<<<<<<
(اون نقطه ها رو به جای فاصله گذاشتم و فلش ها هم جهت حرکت یا همون دکمه ها هستند.)
دوستان کسی راه حلشو می دونه

حمیدرضاصادقیان
یک شنبه 25 فروردین 1387, 20:57 عصر
سلام.شما نمیتونی یک فرمی که درحال نمایش هست رو مجددا صداش کنی. به نظر من یا باید فرم دوم رو ببندی ، یا باید visible اونو false کنی تا دوباره فرم اول رو بتونی ببینی. شاید راه دیگه ای هم باشه که من نمیدونم.

Cave_Man
یک شنبه 25 فروردین 1387, 21:30 عصر
اگه لازم داری که فرم یک رو دوباره از توی فرم دوم نشون بدی باید اون فرم (فرم اول) رو دوباره بسازی. با دستور Application.CreateForm که توی سایت هم بحث زیاد شده. بعد از ساختن فرم میتونی SHowModal کنیش.

حمیدرضاصادقیان
یک شنبه 25 فروردین 1387, 21:36 عصر
وقتی که داره از فرم اول فرم دوم رو صدا میکنه ، فرم اول رو که free نمیکنه که بخواد مجددا اونو بسازه.

mzjahromi
یک شنبه 25 فروردین 1387, 21:51 عصر
وقتی که داره از فرم اول فرم دوم رو صدا میکنه ، فرم اول رو که free نمیکنه که بخواد مجددا اونو بسازه.
کاری به اون نداره میتونه یک نسخه دیگه ازش بسازه از نوع همون فرم

samprp
یک شنبه 25 فروردین 1387, 22:06 عصر
دوستان مشکل فراتر از این حرفاست.

اولا در حالتیکه من از Show خالی نه از ShowModal استفاده کنم همه چیز درسته

دوما من اینایی که گفتین رو رعایت کردم . برای اطمینان کدش رو می زارم ببینین درسته یا نه:



frmStuffChoose.ShowModal;


این کدیه تو یه باتن و تو فرم اصلیست و frmStuffChoose همون فرم یکه

frmStuffChoose.close;
frmStuffChoose.Hide;
frmStuffChoose.Visible:=False;

frmFileNew.ShowModal;


اینم کدیه که تو یه باتن تو همون فرم frmStuffChoose هستش . همون جوری که می بینید من در سه حالت برای اطمینان بیشتر فرم رو بستم و بعدش فرم 2 رو باز کردم .


frmStuffChoose.ShowModal;


خوب اینم کدیه که تو فرم frmStuffChoose یا همون فرم 2 هستش و فرم یک یا frmStuffChoose را صدا می زنه .

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

samprp
دوشنبه 26 فروردین 1387, 07:45 صبح
کاری به اون نداره میتونه یک نسخه دیگه ازش بسازه از نوع همون فرم
اگه بدون فری یه کی دیگه بسازی در نهایت حافظه پر میشه.
فکر اینجاشم کردین.

از این بگذریم و پست قبلی کدهاشو نوشتم.کسی راه حلی نداره؟
ممنون میشم.

mzjahromi
دوشنبه 26 فروردین 1387, 08:33 صبح
اگه بدون فری یه کی دیگه بسازی در نهایت حافظه پر میشه.
فکر اینجاشم کردین.
بی حساب کتاب آره.
باید شرایط شما رو دید.
نه اینکه روی همون متغیر یکی دیگه ساخت.
-------------------------------------------------------------------------------------
[QUOTE]انشا الله که تونسته باشم خوب بیان کنم . خوب دوستان می دونید مشکل کجاست؟[/
QUOTE]
شما اول اسم سه تا فرمتون رو بنویسید. بعدش به ترتیب بنویسید کدومش باز میشه و کدوم بسته. ترتیب اینها مهمه

samprp
دوشنبه 26 فروردین 1387, 11:15 صبح
خوب شرایط همینایی هست که گفتم .
من زیاد با دلفی کار نکردم یعنی مبتدی هستم (منظورم اینه که بیشتر توضیح بدید .).

یه برنامه ی انبار داری با اس کیو ال نوشتم.
برای افزودن به پایگاه داده باید یه پنجره باز بشه و بعد چیزایی که می خوام یا همون فیلدا رو وارد کنه و بعدش اوکی و تو دیتابس اضافه بشه .

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

خوب یه دکمه گذاشتم به جای همون باکسی که قرار بود کاربر توش نام کالا رو بنویسه.

بنابراین یه فرم دیگه (همون فرم 2 باز می شه) و کاربر از داخلش یکی از کالاهایی که داخل DbGrid هست رو انتخاب می کنه . و بعد از اوکی دوباره همون پنجره ی که داخلش اون دکمه رو زده ظاهر می شه و بعد بقیه ی موارد رو تکمیل می کنه و اوکی می زنه و پیفام ساکسسفول و بعد بازگشت به فرم اصلی .

frmMain : فرم اصلی
frmStuffChoose : فرم انتخاب کالا یا همون فرم 1 که اول باز می شه البته می تونه از تو فرم 2 هم باز بشه .
frmFileNew : همون فرم 2 که بعد از اینکه کاربر از فرم frmStuffChooseکالا رو انتخاب کرد تو این فرم بقیه ی فیلد ها رو کامل می کنه و اوکی و بازگشت به فرم اصلی . البته کاربر می تونه با زدن دکمه ای دیگر مجدد فرم frmStuffChooseرو ظاهر کنه . (ممکنه بخواد کالای دیگه ای رو انتخاب کنه).

همون طور که متوجه شده اید وقتی فرم frmStuffChoose باز می شه کاربر نباید به فرم اصلی دسترسی داشته باشه . یعنی مادل باشه چون ممکنه کاربر یه تغییراتی تو جدول کالا ها بده .
و در ضمن وقتی هم که کاربر فرم frmFileNew رو باز کرد نباید به فرم frmMin دسترسی داشته باشه به خاطر همون دلیل بالا .

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

انشا الله که کامل گفته باشم .

Vahid_moghaddam
دوشنبه 26 فروردین 1387, 12:27 عصر
یعنی وقتی داره اطلاعات مربوط به کالای x رو کامل می کنه، بخواد کالای y رو انتخاب کنه؟ امکانش نیست فرم 2 وقتی می خواید کالا رو عوض کنید بسته بشه و دوباره از فرم 1 باز بشه؟

mirzaii
دوشنبه 26 فروردین 1387, 19:46 عصر
دوست عزیز آقای samprp همون طور که خودتون می دونید
modal form: در واقع فرمهایی هستند که تا زمانی بسته نشن امکان کار با فرمهای قبلی نیست . و بعد از بسته شدن ، حافظه اشغال شده آزاد می شه .نمی دونم شما چطور می خواین بعد از ساختن دو فرم مودال دوباره به فرم اصلی برگردید . به نظر بنده به تره از modaless form استفاده کنید .

samprp
دوشنبه 26 فروردین 1387, 20:28 عصر
خوب آره دیگه .
شما فرض کن داری یه حواله مربوط به درج یک کالا تو انبار رو می نویسی .
در ضمن فرم یک که گفتم فقط برای انتخاب نام کالاست.
من اصلا نمی خواستم مسوله رو بگم
چون می خوام من و بقیه بتونیم اگه مشکل مشابهی بود رفعش کنیم نه اینکه برنامه رو به خاطر خطا عوضش کنیم.

samprp
دوشنبه 26 فروردین 1387, 20:33 عصر
دوست عزیز آقای samprp همون طور که خودتون می دونید
modal form: در واقع فرمهایی هستند که تا زمانی بسته نشن امکان کار با فرمهای قبلی نیست . و بعد از بسته شدن ، حافظه اشغال شده آزاد می شه .نمی دونم شما چطور می خواین بعد از ساختن دو فرم مودال دوباره به فرم اصلی برگردید . به نظر بنده به تره از modaless form استفاده کنید .

ممنون دوست عزیز.
خوب گفتی.
اولا هر فرم مودلی وقتی می خواد فرم مودل بعد رو شو کنه اول خودش کلوز می شه
تو یه باتن گذاشتم که بعد از اینکه کاراش رو انجام داد اول خودش رو کلوز می کنه و بعدش می ره فرم بعد رو شو مدل می کنه .
در ضمن من می خوام تو فرم کاربر بتونه دوباره به فرم 1 بره
فرم یک هم شو مدال.