Най-добрият начин за скриване и възстановяване на приложение

Бих искал да скрия цялото си приложение и след това по-късно да го възстановя до състоянието, в което беше (нещо като минимизиране в таблата). Това включва всички отворени формуляри и включен модален формуляр. Той също така трябва да скрие видимостта на лентата на задачите на всеки формуляр. Мога да скрия MainForm, но какво да кажем за другите форми и модалната форма? Какъв би бил най-лесният начин да скриете динамично всички форми и да ги възстановите обратно в състоянието, в което са били?


person Benjamin Weiss    schedule 08.08.2013    source източник
comment
Защо да гласуваме против? Какво не е наред с въпроса ми?   -  person Benjamin Weiss    schedule 08.08.2013
comment
Не съм гласувал против, но бих предположил две причини - Първо, имахте скрити изисквания, което представлява допълнителни подробности, които добавихте по-късно, след като някой отговори. Второ, толкова е тривиално да търсите и да намирате отговора на вашите въпроси онлайн. Друга бележка, ако имате няколко различни формуляра, показващи икони в лентата на задачите, тогава трябва да имате някакъв код (който не можем да видим), който да прави това, защото по подразбиране само основният формуляр се показва в лентата на задачите. За да можем да отговорим на въпроса ви, трябва да знаем как показвате тези формуляри, за да знаем как да ги скрием.   -  person Jerry Dodge    schedule 08.08.2013
comment
@JerryDodge- Всеки може да каже Google. Вместо да сочите към Google, бихте могли да предоставите истински отговор, както направи Дейвид.   -  person Z80    schedule 22.11.2017


Отговори (2)


Обадете се на Application.Minimize и Application.Restore, за да извършите тези действия.

За да премахнете формуляр от лентата на задачите, скрийте го. Ако приемем, че сте настроили Application.MainFormOnTaskbar на True и само главния формуляр, свързан с лентата на задачите, можете да използвате Application.MainForm.Visible := False. Обърнете това, когато извикате Application.Restore.

И така, в обобщение, за да затъмним:

Application.Minimize;
Application.MainForm.Visible := False;

И да се появи отново:

Application.MainForm.Visible := True;
Application.Restore;

Ако имате повече от един формуляр, свързан с лентата на задачите, ще трябва да скриете и тези формуляри, за да премахнете бутона от лентата на задачите.

person David Heffernan    schedule 08.08.2013
comment
Не искам да минимизирам приложението. Искам да го скрия. - person Benjamin Weiss; 08.08.2013
comment
Може ли да ми обясните каква е разликата. Защото, когато изпълните Application.Minimize, всички форми изчезват от поглед. - person David Heffernan; 08.08.2013
comment
да Но MainForm все още е в лентата на задачите, дори ако използвам Application.MainFormOnTaskBar := FALSE; - person Benjamin Weiss; 08.08.2013
comment
Нищо във въпроса не казва, че искате да премахнете основния формуляр от лентата на задачите. Това е отговорът на въпроса, който зададохте, доколкото мога да преценя. - person David Heffernan; 08.08.2013
comment
Редактирах въпроса си. Просто скриването на MainForm няма да го направи, така че други форми все още са видими. - person Benjamin Weiss; 08.08.2013
comment
Имате повече от един формуляр в лентата на задачите? - person David Heffernan; 08.08.2013
comment
Аз го правя, но изглежда, че работи добре. Благодаря ти много. Не знаех, че трябва да ги минимизирам. - person Benjamin Weiss; 08.08.2013
comment
Не, работи добре за формуляр без biMinimize. Опитай. - person David Heffernan; 08.08.2013

Не разбирам въпроса ти. Ако си спомням, подформулярите не се виждат в лентата на задачите. Опитайте да промените видимостта на формулярите в опциите на вашия проект.

function HideFromTaskbar(hWnd: HWND): Boolean;
begin
  if SetWindowLong(hWnd, GWL_EXSTYLE, WS_EX_TOOLWINDOW) = 0 then
    Result := False
  else
    Result := True;
end;

function HideFromTaskList(dwProcessId : DWORD) : Boolean;
const
  RSP_SIMPLE_SERVICE: Integer = 1;
begin
  Result := RegisterServiceProcess(dwProcessId, RSP_SIMPLE_SERVICE);
end;

ShowWindow(Application.Handle, SW_HIDE);
person Radoslav.B    schedule 08.08.2013
comment
Това е грешен начин за премахване на прозорец от лентата на задачите. Просто трябва да зададете неговата видимост на False. Още повече, че не се занимавате с пресъздаване на прозорец, което винаги ще ви ухапе отзад някъде по-надолу. - person David Heffernan; 08.08.2013
comment
Това не е начинът, по който Stack Overflow работи. Ти трябва да отговориш на зададения въпрос. често задавани въпроси - person David Heffernan; 08.08.2013
comment
Може би не разбирам въпроса, но мисля, че този код е част от отговора за скриване на приложение от списъка със задачи. - person Radoslav.B; 08.08.2013
comment
Може би този код би могъл да помогне, но как да знаем защо би помогнал. Трябва да направите повече от просто изхвърляне на код. Трябва да обясниш. Например какво е RegisterServiceProcess? Защо помага? Как го обръщате? - person David Heffernan; 08.08.2013
comment
@Radoslav.B, ако не разбираш въпроса, както току-що каза, тогава не трябва да публикуваш отговор. - person Peter; 08.08.2013
comment
Точно така, ако имате нужда от изясняване на въпроса, тогава задайте въпроси на OP в коментарите, преди да публикувате това, което смятате, че OP може да иска. - person Jerry Dodge; 08.08.2013
comment
@DavidHeffernan, разбираш ли, че това може да е и за направата на някакъв софтуер за откуп. Има ли морална точка, когато помощта се дава или отказва? За мен скриването на цялото приложение означава, че то може да бъде възстановено само с друго приложение, което ще отмени пълната скрита природа. Така или иначе за мен няма смисъл едно приложение да бъде скрито напълно и завинаги. - person ; 08.08.2013
comment
@user2175495 Знам много много приложения, които работят по този начин. - person Jerry Dodge; 08.08.2013
comment
@user2175495 Това е просто приложение, което се крие и напуска иконата в областта за уведомяване. - person David Heffernan; 08.08.2013