【发布时间】:2013-08-08 17:56:36
【问题描述】:
我有一个带有TTrayIcon 组件的应用程序,我用它来“隐藏”和“恢复”我的 MainForm。这是我用来“隐藏”的(OnTrayClick)
procedure TMainWindow.TrayIcon1Click(Sender: TObject);
var
I : Integer;
begin
if Application.MainForm.Visible then begin
{ Hide }
Application.MainForm.Visible := FALSE;
end else begin
{ Restore }
Application.MainForm.Visible := TRUE;
WindowState := wsNormal;
Application.BringToFront();
{ Workaround for ModalForms }
for I := 0 to Screen.FormCount-1 do begin
if (fsModal in Screen.Forms[I].FormState) then begin
Screen.Forms[I].BringToFront;
Screen.Forms[I].SetFocus;
break; // Stop looking for more ModalForms
end;
end;
end;
end;
如果没有打开其他(模态)表单,则此示例可以正常工作。
但是如果有一个 ModalForm 打开并恢复我的 MainForm,ModalForm 似乎在 MainForm 后面,我无法访问它。恢复 MainForm 后,如何激活/聚焦 ModalForm 并将其放在 MainForm 前面?我的Application.MainFormOnTaskbar 设置为False
编辑: 如果一个 ModalForm 打开并且我恢复了我的 MainForm,那么这两个表单都不会聚焦。
【问题讨论】:
-
@KenWhite 对不起。我改变了我的问题。
Restore是错误的术语。我不隐藏任何模态表单。 -
本杰明,这更清楚了。我将删除我的 cmets,因为它们不再适用。 :-)
-
为什么 MainFormOnTaskbar 是假的?
-
@DavidHeffernan 因此,当它“最小化”到托盘时,我可以将其从任务栏中删除。
-
没有。您将 MainFormOnTaskbar 设置为 True,并通过隐藏表单从任务栏中删除按钮。就像我们在上一个问题中所做的那样。
标签: delphi vcl delphi-xe4