我使用以下代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.visible := false;
Form2.show;
end;
Run Code Online (Sandbox Code Playgroud)
是的,form1被隐藏,而form2出现了。但是为什么任务栏中的应用程序图标也被隐藏了。
我使用以下代码,但是在隐藏form1时仍无法在任务栏上显示图标。
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);
}
Run Code Online (Sandbox Code Playgroud)
我要隐藏表单时如何在任务栏上保留应用程序图标?
我想在单位文件而不是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
Run Code Online (Sandbox Code Playgroud)
在所有Unit1 / Unit2 / Unit3中,使任务栏上的应用程序图标可用。因为如果我使用.visible:= false,则系统任务栏也会被隐藏。
PS:我使用Delphi 2010,并在Windows XP和7 Enviorment上运行。
好的,现在很清楚你想要什么,首先有几件事:
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;
Run Code Online (Sandbox Code Playgroud)
单元 2/表格 2:
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;
Run Code Online (Sandbox Code Playgroud)
单元 3/表格 3:
procedure TForm3.CloseButtonClick(Sender: TObject);
begin
Close;
end;
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
TForm(Owner).Show;
Action := caFree;
end;
Run Code Online (Sandbox Code Playgroud)
请注意,在这些更改期间,任务栏按钮的标题保持不变。如果要将其与显示的表单的标题同步,请设置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;
Run Code Online (Sandbox Code Playgroud)