Лучший способ скрыть и восстановить приложение

Я хотел бы скрыть все свое приложение, а затем восстановить его обратно в состояние, в котором оно было (вроде как свернуть в лоток). Сюда входят все открытые формы и включенная модальная форма. Он также должен скрывать видимость панели задач каждой формы. Я могу скрыть 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