PDA

View Full Version : نمایش فرمها روی هم



SADAF
سه شنبه 01 شهریور 1384, 14:10 عصر
سلام به همه

سه فرم Form1,Form2,Form3 داریم . در فرم1 , فرم 2 Show می شود و سپس فرم 3 ShowModal می شود . وقتی فرم فعال پروژه فرم3 است توسط Application Event که کدش در فرم1 نوشته شده است می خواهم فرم 2 را Show کنم مجددا و البته اینبار فرم 3 روی فرم 2 نمایش داده شود و فعال هم باشد. طوری که روی فرم 2و3 بتوانم switch کنم .

اگر در فرم 1 فرم 2 را اصلا show نکرده باشم اینکار میسر است ولی اگر یکبار روی فرم1 Show شده باشد وقتی فرم 3 ShowModal شد دیگر Show شدن فرم2 بی فایده و غیرقابل استفاده است.

اگر به جنین موردی برخورده اید لطفا کمکم کنید . ممنون

حرفه ای
سه شنبه 01 شهریور 1384, 14:56 عصر
یک راه حل ساده :

بر روی Form2 از دستور زیر استفاده کن

Form2.FormStyle:=fsStayOnTop;

درست می شه مگه نه

SADAF
سه شنبه 01 شهریور 1384, 16:07 عصر
نه
استایلش باید هم اینطوری باشه که هست . ولی این مشکل رو حل نمیکنه ...

MH2538
چهارشنبه 09 شهریور 1384, 16:28 عصر
سلام
می تونم بپرسم چرا می خواین فرم 3 رو showModal کنین
بدون ShowModal همه کارها همونطوری پیش می ره که شما انتظار دارین

SADAF
سه شنبه 15 شهریور 1384, 18:30 عصر
سلام
دیگه ناامید شده بودم و به این توپیک سر نمی زدم .
فرض کنید یک پروژه آماده دارید (سیستمی اداری که در آن یک فرم اصلی دارید که منوهای اصلی در ان قرار دارد و با انتخاب هر منو به فرمهای دیگر وارد می شوید که این فرمها نسبت به فرم اصلی ShowModal شده اند ) حال قرار شده یک فرم خاص در همه فرمهای پروژه قایل دسترسی باشد و در هر فرمی که فراخوانی شد نسبت به آن Show بوده و StayOnTop هم باشد .
این فرم خاص یک بار create می شود و سپس n بار و در فرمهای مختلف Show می شود .
اینجاست که به مشکل برمی خوریم .
فرم که create شد Owner خود را گرفته است (که همان فرم اصلی است) حال وقتی در فرمهای دیگر Show می شود , Show می شود و StayOnTop هم هست ولی اصلا قابل دسترسی نست و Focus روی آن نمی رود .
واضح شد ؟

vcldeveloper
چهارشنبه 16 شهریور 1384, 02:40 صبح
فرض کنید یک پروژه آماده دارید (سیستمی اداری که در آن یک فرم اصلی دارید که منوهای اصلی در ان قرار دارد و با انتخاب هر منو به فرمهای دیگر وارد می شوید که این فرمها نسبت به فرم اصلی ShowModal شده اند ) حال قرار شده یک فرم خاص در همه فرمهای پروژه قایل دسترسی باشد و در هر فرمی که فراخوانی شد نسبت به آن Show بوده و StayOnTop هم باشد .
برای همچین کاری از MDI استفاده کن.

SADAF
شنبه 19 شهریور 1384, 16:59 عصر
عرض کردم که پروژه آماده است و همه کارهایش انجام شده . پس نمی توانم به حالت MDI تبدیلش کنم .

SADAF
شنبه 19 شهریور 1384, 17:00 عصر
عرض کردم که پروژه آماده است و همه کارهایش انجام شده . پس نمی توانم به حالت MDI تبدیلش کنم .

vcldeveloper
یک شنبه 20 شهریور 1384, 03:34 صبح
عرض کردم که پروژه آماده است و همه کارهایش انجام شده . پس نمی توانم به حالت MDI تبدیلش کنم .
این اشتباه شما در طراحی برنامه بوده. شما می خواید بجای رفع مشکل طراحی برنامه خودتون، از دو فرم Modal بطور همزمان در یک برنامه استفاده کنید که با منطق اینگونه فرم ها سازگار نیست.

Naficy
یک شنبه 20 شهریور 1384, 13:12 عصر
برین سراغ محلی(هایی) که ShowModal رو گذاشتین. اونو به چنین کدی تبدیل کنین:


Form1.Enabled:=False;
try
Form2.ModalResult:=mrNone;
Form2.Show;
while Form2.ModalResult=mrNone do Application.HandleMessage;
Form2.Hide;
finally
Form1.Enabled:=True;
end;

ضمنا مقدار بازگشتی از Form2.ShowModal رو هم که قبلا دریافت می کردین می تونین از Form2.ModalResult بردارین. این مشکلتونو حل می کنه. بازم مشکلی داشتین خبر بدین.

MH2538
سه شنبه 22 شهریور 1384, 14:16 عصر
سلام
من یه برنامه نمونه نوشتم و اون رو به مطلبم ضمیمه کردم
دانلود کنید فکر می کنم جواب سئوال شما باشه
موفق باشید