Delphi скрывает форму, а не скрывает значок приложения на панели задач

Я использую следующий код:

procedure TForm1.Button1Click(Sender: TObject);
begin
 Form1.visible := false;
 Form2.show;
end;

Да, форма1 скрыта и появляется форма2. Но почему значок приложения на панели задач также скрыт...

Я использую следующие коды и по-прежнему не могу показать значок на панели задач, а скрыть форму1.

visible := false;
{
 enable := false;
 Application.MainFormOnTaskbar := True;
 ShowWindow(Application.Handle, SW_SHOW);
 SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
}

Как сохранить значок приложения на панели задач, пока я хочу скрыть форму?

Я хочу сделать это в файлах устройств, а не в файле DPR.

Файлы, которые я хочу сохранить, хранятся на панели задач системы: http://sidhiciang.com/myfiles/ShowHideForms.rar

Unit1.pas
 If Form1.btShowForm2Click() , then 
 Hide Form1 and Show Form2 ( actHideForm1execute(self)).
 If Form1.btCloseForm1Click(), then 
 Close the application

Unit2.pas
 If Form2.btShowForm3Click(), then 
 Hide Form2 and Show Form3 ( actHideForm2execute(self)).
 If Form2.btCloseForm2Click(), then 
 Show the Form1 and Form2.close (actShowForm1execute(self))

Unit3.pas
 If btCloseFrom3Click(), then
 Show Form2 and Close Form3

Во всех модулях Unit1/Unit2/Unit3 сохраните значок приложения на панели задач. Потому что, если я использую.visible: = false, панель задач системы также становится скрытой.

PS: Я использую Delphi 2010 и работаю в Windows XP и 7 Enviorment.

3 ответа

Хорошо, теперь, когда ясно, что вы хотите, сначала несколько вещей:

  • Первая созданная форма автоматически является MainForm,
  • Приложение не может без MainForm; когда MainForm закрывается, приложение закрывается, любые другие формы отображаются,
  • Вы можете скрыть MainForm,
  • По умолчанию (в старых версиях Delphi) окно приложения отображается на панели задач (Application.MainFormOnTaskbar = False). Пока приложение активно, и пока отображается хотя бы одна форма, этот значок/окно отображается на панели задач.
  • Когда Application.MainFormOnTaskbar = True, значок/окно MainForm отображается на панели задач. Когда MainForm скрывается, значок исчезает. Отображение другой формы не приводит к другому значку/окну панели задач, поэтому в этом случае нет значка.

Итак, ясно, что вам нужно установить Application.MainFormOnTaskbar := False в файле проекта.

Кроме того, следующая комбинация методов работает так, как вы хотите:

Unit1/Form1/MainForm:

procedure TForm1.CloseButtonClick(Sender: TObject);
begin
 Close;
end;

procedure TForm1.OpenForm2ButtonClick(Sender: TObject);
begin
 TForm2.Create(Self).Show;
 Hide;
end;

Unit2/Form2:

procedure TForm2.CloseButtonClick(Sender: TObject);
begin
 Close;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 TForm(Owner).Show;
 Action := caFree;
end;

procedure TForm2.OpenForm3ButtonClick(Sender: TObject);
begin
 TForm3.Create(Self).Show;
 Hide;
end;

Unit3/Форма Form3:

procedure TForm3.CloseButtonClick(Sender: TObject);
begin
 Close;
end;

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 TForm(Owner).Show;
 Action := caFree;
end;

Обратите внимание, что заголовок кнопки панели задач остается неизменным во время этих изменений. Если вы хотите синхронизировать это с заголовком отображаемой формы, установите Application.Title.


Вы можете переключаться между ручками, показанными на панели задач. Покажите приложение при скрытии и отображаемую форму.

procedure TForm1.HideIt;
begin
 Visible := false;
 Application.MainFormOnTaskbar := false;
 ShowWindow(Application.Handle, SW_SHOW);
end;

procedure TForm1.ShowIt;
begin
 Visible := true;
 Application.MainFormOnTaskbar := true;
 ShowWindow(Application.Handle, SW_Hide);
end;

// overrride CreateParams: procedure CreateParams(var Params: TCreateParams); override;
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
 inherited;
 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.MainFormOnTaskbar := true;
end;


Предполагая, что Form1 является основной формой и Form1.Hide все, что вы хотите, за исключением того, что кнопка панели задач должна оставаться видимой, то то, что вы действительно хотите сделать, сводит к минимуму приложение:

Application.Minimize;

В противном случае вы, вероятно, ищете Hide the Main Form.

licensed under cc by-sa 3.0 with attribution.