PDA

View Full Version : مخفی شدن آیکن برنامه در TaskBar در زمان Hide شدن فرم



Felony
جمعه 23 بهمن 1388, 20:07 عصر
:لبخندساده:سلام ،

برنامه ای نوشتم شامل چند فرم که هر فرم شامل مراحلی برای پیشبرد اهداف مورد نظر هست ، حالا روی فرم اول یک دکمه با نام Next دارم که وقت روش کلیک میکنم فرم اول برنامه مخفی میشه و فرم بعدی نمایش داده میشه ، وقتی روی این دکمه کلیک میشه چون فرم اول مخفی میشه ، آیکن برنامه هم از Taskbar حذف میشه .

حالا باید چی کار کنم که آیکن برنامه وقتی Main Form برنامه مخفی هست هم نمایش داده بشه ؟

:چشمک:ممنون .

mrbm_2007
جمعه 23 بهمن 1388, 20:51 عصر
شاید راه خیلی خوبی نباشه ولی می تونی بجای hide کردن فرم مختصاتش رو بیرون از صفحه بذاری مثلا:
MainForm.top:=-3000;
اینجوری ایکن برنامه هم می مونه!

Felony
جمعه 23 بهمن 1388, 21:19 عصر
شاید راه خیلی خوبی نباشه ولی می تونی بجای hide کردن فرم مختصاتش رو بیرون از صفحه بذاری مثلا:
MainForm.top:=-3000;
اینجوری ایکن برنامه هم می مونه!

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

Mahmood_M
جمعه 23 بهمن 1388, 22:35 عصر
اگه برای مخفی کردن فرم از ShowWindow استفاده کنی ، برنامه در TaskBar باقی می مونه :
پنهان :
ShowWindow(Handle, SW_HIDE);
نمایش :
ShowWindow(Handle, SW_SHOW);
اگه می خوای چیزی شبیه به یک Wizard بسازی ، پیشنهاد می کنم در یک فرم از یک PageControl استفاده کن و صفحات اون رو به ترتیب نمایش بده ...

موفق باشی ...

Felony
یک شنبه 25 بهمن 1388, 12:09 عصر
اگه برای مخفی کردن فرم از ShowWindow استفاده کنی ، برنامه در TaskBar باقی می مونه :
پنهان :
ShowWindow(Handle, SW_HIDE);
نمایش :
ShowWindow(Handle, SW_SHOW);
اگه می خوای چیزی شبیه به یک Wizard بسازی ، پیشنهاد می کنم در یک فرم از یک PageControl استفاده کن و صفحات اون رو به ترتیب نمایش بده ...

موفق باشی ...
محمود جان با ShowWindow هم تست کردم ، باز آیکن از TaskBar حذف میشه و وقتی به فرم اصلی بر میگردم نمایش داده میشه .

در مرود PageControl هم همونطور که گفتم برام مقدور نیست و باید با همین چند تا فرم درستش کنم .

کسی تا به حال همچین مشکلی نداشته ؟

mrbm_2007
یک شنبه 25 بهمن 1388, 12:35 عصر
Form2.ParentWindow := GetDesktopWindow;
Form1.hide;
Form2.Show;

//Bring new form to front
SetForegroundWindow(Form2.Handle);
Form2.BringToFront;

این طوری حل میشه!

Mahmood_M
یک شنبه 25 بهمن 1388, 13:10 عصر
محمود جان با ShowWindow هم تست کردم ، باز آیکن از TaskBar حذف میشه و وقتی به فرم اصلی بر میگردم نمایش داده میشه .
ولی با ShowWindow از TaskBar حذف نمیشه !
این هم یک مثال :

http://mahmoodn.persiangig.com/image/DawnMN.gif (http://mahmoodn.persiangig.com/document/Delphi/S_W.rar)

موفق باشی ...

Felony
یک شنبه 25 بهمن 1388, 15:10 عصر
Form2.ParentWindow := GetDesktopWindow;
Form1.hide;
Form2.Show;

//Bring new form to front
SetForegroundWindow(Form2.Handle);
Form2.BringToFront;

این طوری حل میشه!


مشکل آیکن حل میشه ولی کلید ها برنامه دیگه کار نمیکنن !

محمود جان وقتی از ShowWindow تو برنامه دیگه استفاده میکنم درست جواب میده ولی تو برنامه خودم که خیلی هم سنگین هست وقتی استفاده میکنم آیکن حذف میشه ، نمیدونم کدوم یک از کدهام این مشکل رو به وجود میاره ، در هر صورت ممنون ، یه کاریش میکنم ...

Mahmood_M
یک شنبه 25 بهمن 1388, 15:43 عصر
محمود جان وقتی از ShowWindow تو برنامه دیگه استفاده میکنم درست جواب میده ولی تو برنامه خودم که خیلی هم سنگین هست وقتی استفاده میکنم آیکن حذف میشه ، نمیدونم کدوم یک از کدهام این مشکل رو به وجود میاره
قسمت TaskBar مربوط به Application هست و در موارد زیر حذف میشه :
اگه فرم اصلی رو Hide کنی
اگه Visible فرم اصلی رو False کنی ( درواقع وقتی فرم Hide میشه ، Visible اش False میشه )
اگه با ShowWindow هندل Application رو Hide کنی ، یعنی :

ShowWindow(Application.Handle, SW_HIDE)
و ...

این موارد رو چک کن ، شاید کدی نوشتی که یادت نیست ، وگرنه ، اگه فقط از ShowWindow استفاده کنی برنامه در قسمت TaskBar می مونه ...
امیدوارم مشکلت حل بشه ، موفق باشی ...

mrbm_2007
یک شنبه 25 بهمن 1388, 15:46 عصر
مشکل آیکن حل میشه ولی کلید ها برنامه دیگه کار نمیکنن !
آره من امتحان نکرده بودم حق با شماست!!!

mrbm_2007
یک شنبه 25 بهمن 1388, 15:57 عصر
یک راه واقعا ساده و اصولی!!!!
توی فایل dpr برنامه این خط رو عوض کن


Application.MainFormOnTaskbar := True;اینجوری


Application.MainFormOnTaskbar := False;من امتحان کردم
هیچ کار اضافه دیگه ای هم نمی خواد!!!!!!!
:کف:

Mahmood_M
یک شنبه 25 بهمن 1388, 16:16 عصر
یک راه واقعا ساده و اصولی!!!!
توی فایل dpr برنامه ای خط رو عوض کن
کد:

Application.MainFormOnTaskbar := True;

اینجوری
کد:

Application.MainFormOnTaskbar := False;

من امتحان کردم
هیچ کار اضافه دیگه ای هم نمی خواد!!!!!!!

این امکان در دلفی 2007 یا 2009 به بالا وجود داره ، یعنی در دلفی 7 این امکان وجود نداره ، البته نمی دونم آقا مجتبی از چه نسخه ای استفاده می کنند ؟!

...

mrbm_2007
یک شنبه 25 بهمن 1388, 16:36 عصر
من با 2010 تست کردم
الان دلفی 7 هم دم دست ندارم
یعنی تو دلفی 7 اصلا این property برای Application وجود نداره؟

Mahmood_M
یک شنبه 25 بهمن 1388, 16:52 عصر
یعنی تو دلفی 7 اصلا این property برای Application وجود نداره؟
نه ، فکر کنم از نسخه ی 2009 یا شاید هم 2007 به دلفی اضافه شد ...

...

mrbm_2007
یک شنبه 25 بهمن 1388, 17:33 عصر
این رو هم یه جورایی از یونت Forms در آوردم!!

procedure ShowOnTaskbar(const Handle: THandle);
begin
if not IsWindowVisible(Handle) then exit;
ShowWindow(Handle, SW_HIDE);
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
ShowWindow(Handle, SW_SHOW);
end;

Felony
دوشنبه 26 بهمن 1388, 09:52 صبح
یک راه واقعا ساده و اصولی!!!!
توی فایل dpr برنامه این خط رو عوض کن


Application.MainFormOnTaskbar := True;اینجوری


Application.MainFormOnTaskbar := False;من امتحان کردم
هیچ کار اضافه دیگه ای هم نمی خواد!!!!!!!
:کف:

:لبخند:این کار رو کردم گفتم شاید درست بشه ولی نشد ، بعد که شما این پست رو زدید و اون راهی هم که محمود جان گفتن تست کردم و تو پروژم جواب نداد مجبور شدم کدها رو خط به خط بررسی کنم ، در آخر یک جا تو برنامه همین پراپرتی رو خودم True کرده بودم که خودم هم یادم نمیاد این کد رو کی نوشته بودم ، در هر صورت ردیف شد ، ممنون .