PDA

View Full Version : کد ضد Close



یعقوب
دوشنبه 14 دی 1383, 18:02 عصر
با سلام
با چه کدی میشه عملیات Close رو متوقف کرد؟
منظورم اینه که بعد از رویداد OnClose ِ فرم اصلی برنامه ، چطور جلوی
بسته شدن برنامه رو بگیریم؟
(مثلا توی برنامه ام می خوام در رویداد OnClose ، یک فرم ظاهر بشه و از کاربر
سؤال کنه که آیا برنامه کاملاً بسته بشه و یا در قسمت Tray مخفی بشه؟ )

خیلی متشکرم

Sepidar
دوشنبه 14 دی 1383, 18:10 عصر
هر فرم رویدادی به نام OnCloseQuery دارد که در آن رویداد، با پارامتر CanClose می توانید اجازه بسته شدن یا نشدن به فرمتان بدهید.

یعقوب
سه شنبه 15 دی 1383, 00:17 صبح
ببخشید من نتونستم اون رو پیدا کنم.
میشه توضیح واضح تر همراه مثال بدین.

خیلی ممنون

vcldeveloper
سه شنبه 15 دی 1383, 02:00 صبح
منظور ایشون رویداد OnCloseQuery بود.
برای مثال میونی کدی شبیه این رو در این رویداد بنویسی تا از کاربر موقع بستن فرم سوال بشه:


if MessageDlg('Do u wana close the window?',mtConfirmation,[mbYes,mbNO],0) = idYes then
CanClose := True
else
CanClose := False;

FirstLine
سه شنبه 15 دی 1383, 07:18 صبح
با سلام
این یه کد که دکمه Close را غیر فعال میکنه. شاید بدردتون بخوره :)
این روال را در OnCreate فرم صدا بزنید.


Procedure Form_Close_Disable(Handle:THandle );
// Form_Close_Disable(Handle );
Var
Flag:uint;
AppSysMenu: THandle;
Begin

AppSysMenu := GetSystemMenu (Handle, False);
Flag:= MF_GRAYED;;
EnableMenuItem(AppSysMenu,SC_CLOSE,MF_BYCOMMAND or Flag );

End;

با تشکر

سه شنبه 15 دی 1383, 14:43 عصر
سلام
اگه میخوای برنامه ات اصلا بسته نشه اینها جواب نمیده چون با end procces برنامه بسته میشه .
راهش این است که برنامه تو از نوع سرویس باشه تا بصورت سیستمی اجرا بشه که endprocces هم نشه و البته باید از لیست endtask حذفش کنی .

vcldeveloper
چهارشنبه 16 دی 1383, 01:56 صبح
سلام
اگه میخوای برنامه ات اصلا بسته نشه اینها جواب نمیده چون با end procces برنامه بسته میشه .
راهش این است که برنامه تو از نوع سرویس باشه تا بصورت سیستمی اجرا بشه که endprocces هم نشه و البته باید از لیست endtask حذفش کنی .


(مثلا توی برنامه ام می خوام در رویداد OnClose ، یک فرم ظاهر بشه و از کاربر
سؤال کنه که آیا برنامه کاملاً بسته بشه و یا در قسمت Tray مخفی بشه؟ )

اگه دقت کنید متوجه میشید که ایشون منظورشون غیرقابل بسته شدن برنامه نبوده :wink:

محمد حسین صمدیان
سه شنبه 27 بهمن 1383, 12:11 عصر
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin
if MessageDlg('Close application ?', mtConfirmation,
[mbYes, mbNo], 0) = mrYes then
Action := caFree
else
Action := caNone;
end;
این کد رو امتحان کن بهترینه!!

فرزاد دلفی باز
سه شنبه 27 بهمن 1383, 13:36 عصر
دوست عزیز یعقوب
شما باید به قول آقای محمد حسین صمدیان در رویداد FormClose فرم Action := caFree را قرار دهید