我使用以下代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.visible := false;
Form2.show;
end;
是的,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);
}
如果要隐藏表单,如何在任务栏上保留应用程序图标?
我想在单元文件中进行,而不是在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上运行。
答案 0 :(得分:5)
您可以在任务栏上显示的句柄之间切换 显示隐藏的应用程序和显示的表单。
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;
答案 1 :(得分:3)
假设Form1
是主要表单而Form1.Hide
做了你想做的一切,除了任务栏按钮应该保持可见,那么你真正想做的是最小化应用程序:
Application.Minimize;
否则,您可能正在寻找Hide the Main Form。
答案 2 :(得分:3)
好的,现在很清楚你想要什么,先做几件事:
Application.MainFormOnTaskbar = False
)。只要应用程序处于活动状态,并且只要显示至少一个表单,该图标/窗口就会显示在任务栏中。Application.MainFormOnTaskbar = True
时,任务栏中会显示MainForm的图标/窗口。当MainForm被隐藏时,图标消失。显示另一个表单不会导致另一个任务栏图标/窗口,因此根本没有图标。因此,很明显您需要在项目文件中设置Application.MainFormOnTaskbar := False
。
此外,以下方法组合似乎可以按您的方式工作:
<强> 1单元/ Form1中/ MainForm的:强>
procedure TForm1.CloseButtonClick(Sender: TObject);
begin
Close;
end;
procedure TForm1.OpenForm2ButtonClick(Sender: TObject);
begin
TForm2.Create(Self).Show;
Hide;
end;
<强> UNIT2 /窗体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;
<强> 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
。