PDA

View Full Version : غیرفعال کردن Close برنامه در Taskbar



Pr0grammer
سه شنبه 16 مهر 1387, 15:32 عصر
سلام...
من BorderStyle فرم برنامه رو None گذاشتم و در CloseQuery فرم هم CanClose رو False کردم اما چطوری میتونم کاری کنم که کاربر وقتی در TaskBar روی برنامه کلیک راست کرد، اون منو باز نشه! چون با انتخاب close با اون منو برنامه به راحتی بسته میشه! :لبخند:

Amir_Safideh
سه شنبه 16 مهر 1387, 17:54 عصر
procedure TForm1.FormCreate(Sender: TObject);
var Hand: THandle;
Menu: HMenu;
I: Integer;
begin
Hand := FindWindow(Nil,PChar(Caption));
if (Hand <> 0) then
begin
Menu := GetSystemMenu(Hand,False);
if (Menu <> 0 ) then
begin
DeleteMenu(Menu,SC_Close,MF_BYCOMMAND);
I := GetMenuItemCount(Menu);
Dec(I);
if I > -1 then
DeleteMenu(Hand,I,MF_BYCOMMAND);
end;
end;
end;

-------------
موفق باشید.

Pr0grammer
سه شنبه 16 مهر 1387, 22:15 عصر
ممنون، ولی توفیقی نداشت!!! لطفاً کد رو بررسی کنید...

Mahmood_M
چهارشنبه 17 مهر 1387, 00:06 صبح
ممنون، ولی توفیقی نداشت!!! لطفاً کد رو بررسی کنید...
این کد منویی رو غیر فعال میکنه که با کلیک روی آیکون برنامه در سمت چپ پنجره نشون داده میشه ...

سلام...
من BorderStyle فرم برنامه رو None گذاشتم و در CloseQuery فرم هم CanClose رو False کردم اما چطوری میتونم کاری کنم که کاربر وقتی در TaskBar روی برنامه کلیک راست کرد، اون منو باز نشه! چون با انتخاب close با اون منو برنامه به راحتی بسته میشه!
اگه در OnCloseQuery فرم CanlClose رو False کنی ، با کلیک روی Close توی اون منو برنامه بسته نمیشه ... ، درواقع برنامه اصلا بسته نمیشه مگر End Process بکنیش ...

موفق باشی ...

Pr0grammer
چهارشنبه 17 مهر 1387, 01:19 صبح
خب محمود جان من که گفتم این کارو کردم!!!!!
باور کن بسته میشه! به خاطر شما یه بار دیگه بررسی کردم اما همون آش و همون کاسه.....

Pr0grammer
چهارشنبه 17 مهر 1387, 01:24 صبح
اما یه کاری کردم!!!! توی فرم اصلی وقتی CanClose رو False میکنم! جواب میده!
نمیشه کاری کرد فقط وقتی یه فرم خاص فعال هستش برنامه بسته نشه! آخه اینطوری توی همه فرم ها این حالته!
هر چند مهم نیست ... یه راه دیگه هم به ذهنم رسید... بهتره موقع اجرای اون فرم (چون که فرم Loading) هستش برنامه رو از Tasbar حذف کنم بعد دوباره بیارم!

ممنون از هردوتون

Mahmood_M
چهارشنبه 17 مهر 1387, 01:25 صبح
خب محمود جان من که گفتم این کارو کردم!!!!!
باور کن بسته میشه! به خاطر شما یه بار دیگه بررسی کردم اما همون آش و همون کاسه.....
نباید بسته بشه و بسته هم نمی شه ، من الآن باز امتحان کردم ...
مشکل احتمالا از جای دیگه ای هست ، یک بار دیگه کدهای اون قسمت رو چک کن ، برای False کردن CanClose توی رویداد OnCloseQuery شرطی نزاشتی ، یعنی مثلا :


if .. then
Canclose := False;
...

اگه شرطی وجود داره شاید مشکل از شرط باشه ...

در حالت عادی اگه CanClose مقدارش False بشه فرم هرگز بسته نمی شه مگر Thread برنامه Terminate بشه ( همون End Process ) ...


اما یه کاری کردم!!!! توی فرم اصلی وقتی CanClose رو False میکنم! جواب میده!
نمیشه کاری کرد فقط وقتی یه فرم خاص فعال هستش برنامه بسته نشه! آخه اینطوری توی همه فرم ها این حالته!
هر چند مهم نیست ... یه راه دیگه هم به ذهنم رسید... بهتره موقع اجرای اون فرم (چون که فرم Loading) هستش برنامه رو از Tasbar حذف کنم بعد دوباره بیارم!
وقتی Form اصلی برنامه بسته بشه برنامه هم کاملا بسته میشه ( البته حالتهای دیگه هم هست که کاری بهشون نداریم ! )
این که CanClose یک فرم فرعی رو False کنی ، فقط جلوی بسته شدن همون فرم رو میگیره نه کل برنامه رو ...
فرض من اینه که تو داری یه کاری انجام میدی و میخوای تا پایان اون کار برنامه بسته نشه ، اگه این طور هست ، میتونی یک متغیر Boolean تعریف کنی ( مثلا با نام Active ) ، وقتی کار مورد نظرت شروع شد اون رو True کن و وقتی کارت تموم شد اون رو False کن و در OnCloseQuery فرم اصلی این طوری بنویس :


if Active = True then
Canclose := False;

نکته مهم : بهتره متغیر توی فرم اصلی و به صورت عمومی ( توی Public ) ثبت بشه ...

موفق باشی ...

Pr0grammer
چهارشنبه 17 مهر 1387, 01:38 صبح
اگه این طور هست ، میتونی یک متغیر Boolean تعریف کنی ( مثلا با نام Active ) ، وقتی کار مورد نظرت شروع شد اون رو True کن و وقتی کارت تموم شد اون رو False کن و در OnCloseQuery فرم اصلی این طوری بنویس :
کد:
if Active = True then
Canclose := False;
نکته مهم : بهتره متغیر توی فرم اصلی و به صورت عمومی ( توی Public ) ثبت بشه ...

موفق باشی ...
دستت درد نکنه، روش خوبیه، اما من بجاش وقتی فرم لودینگ باز میشه برنامه رو از Taskbar برداشتم ، فکر کنم در این شرایط روش من بهتر باشه، ولی روش تو هم در بعضی مواقع خوبه!

ممنونم عزیز