PDA

View Full Version : بستن فرم هنگام خارج شدن فوکوس



naderanhari
شنبه 30 مهر 1390, 17:31 عصر
میخواهم یک فرم را نمایش داده و بعد از دریافت پاسخ از آن فرم عملی را انجام دهم. پاسخ اینطور بنظر میرسد که از دستور ShowModal و پارامتر ModalResult استفاده کنم. حال سوال این است چگونه میتوان هنگامی که خارج از این فرم کلیک کردم فرم بسته شود و پاسخ آن mrNone باشد؟
حالت دوم: میتوان بجای فرم از یک پانل استفاده کرد به شرطی که اولا همچون فرم در تمام یونیتهای برنامه قابل نمایش باشد. دوما شناور باشد. سوما تا زمان دریافت پاسخ از آن پانل, برنامه اجرای ادامه دستورات را متوقف کند. بهترین و کوتاه ترین کد برای این حالت چه میتواند یاشد؟
با تشکر

BORHAN TEC
شنبه 30 مهر 1390, 21:43 عصر
میخواهم یک فرم را نمایش داده و بعد از دریافت پاسخ از آن فرم عملی را انجام دهم. پاسخ اینطور بنظر میرسد که از دستور ShowModal و پارامتر ModalResult استفاده کنم. حال سوال این است چگونه میتوان هنگامی که خارج از این فرم کلیک کردم فرم بسته شود و پاسخ آن mrNone باشد؟
پاسخ یک فرم از نوع modal نمیتواند mrNone باشد.

حالت دوم: میتوان بجای فرم از یک پانل استفاده کرد به شرطی که اولا همچون فرم در تمام یونیتهای برنامه قابل نمایش باشد. دوما شناور باشد. سوما تا زمان دریافت پاسخ از آن پانل, برنامه اجرای ادامه دستورات را متوقف کند. بهترین و کوتاه ترین کد برای این حالت چه میتواند یاشد؟
بهتره که از کامپوننت TJvCaptionPanel که در مجموعه JVCL قرار داره استفاده کنید.

SAASTN
شنبه 30 مهر 1390, 21:53 عصر
در مورد سوال اول، برای بستن یه فرم که به صورت Modal نمایش پیدا کرده، مقدار ModalResult حتما باید به مقداری غیر صفر تغییر کنه. حتی اگه شما فرم رو Close کنید مقدار ModalResult به mrCancel تغییر خواهد کرد. پس بهتره مقدار دیگه ای رو برای نشون دادن این حالت رزرو کنید و توجه داشته باشید که این مقدار می تونه هر مقداری در بازه Integer باشه و نه لزوما مقادیر شناخته شده. اما اگه بر mrNone بودن خروجی اصرار دارید، بعد از بستن فرم خودتون ModalResult رو به mrNone تغییر بدید. اما این اتفاق باید خارج از کدهای خود فرم صورت بگیره، مثلا روی یک فرم Modal یه Botton بذارید و کد زیر رو براش بنویسید و نتیجه رو ببینید:
procedure TForm2.Button2Click(Sender: TObject);
begin
Close;
if ModalResult <> mrNone then
ModalResult := mrNone;
end;

در مورد بستن فرم موقع کلیک کردن در خارج از محدوده فرم هم باید موس رو Hook کنید، در موردش تو همین بخش زیاد صحبت شده.
اما در مورد سوال دوم، اولا لطفا سوالاتون رو در تاپیک های جداگانه مطرح کنید. تمامی مسائلی که مطرح کردید در همون فرم که بصورت Modal نمایش پیدا کرده جمع میشه. اما اگه می خواید که فرم شبیه به یه پنل دیده بشه کافیه BorderStyle فرم رو به bsNone تغییر بدید. حالا برای این که بشه این فرم رو جابجا کرد:
http://barnamenevis.org/showthread.php?294057-%DA%86%DA%AF%D9%88%D9%86%DA%AF%DB%8C-%D8%AC%D8%A7%D8%A8%D8%AC%D8%A7%DB%8C%DB%8C-%D9%81%D8%B1%D9%85-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-(-%D8%A8%D8%A7-%D8%B4%DB%8C-%D8%B9%DA%A9%D8%B3)&highlight=%D8%AC%D8%A7%D8%A8%D8%AC%D8%A7%DB%8C%DB% 8C (با اندکی تغییر)