强制应用程序在OnCreate过程中显示TaskBar图标

时间:2015-02-08 16:15:14

标签: delphi

我使用delphi XE2。在我的主窗体OnCreate过程中,我运行了一些重要元素,如登录过程等。我的问题是,当我显示登录表单(由OnCreate程序调用)时,我的应用程序在TaskBar上不可见 - 当主表单变得可见时它变得可见。问题是,当用户用另一个应用程序覆盖我的登录表单时,在taskBar上没有图标,他可能不知道我的应用程序已经运行并尝试再次启动它。他必须使用ctrl + tab来获取我的应用程序登录表单。

现在提问...当OnCreate程序没有完成时,如何强制应用程序/操作系统在任务栏上显示应用程序图标?

问候 马里奥

3 个答案:

答案 0 :(得分:8)

您可以覆盖登录表单的CreateParams以包含WS_EX_APPWINDOW ex-style。

type
  TLoginForm = class(TForm)
    ..

  protected
    procedure CreateParams(var Params: TCreateParams); override;
    ...

  end;

procedure TLoginForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;

答案 1 :(得分:0)

创建主窗体的窗口并可见时,将显示任务栏按钮。这发生在OnCreate之后。简单的解决方案是稍后显示登录表单。显而易见的选择是OnShow。确保只在OnShow第一次触发时才这样做。

当然,这假设您希望在登录表单显示时显示主表单。如果没有,那么您需要确保登录表单有任务栏按钮。通过让它无主,这样做。覆盖CreateParams并将WndParent设置为0。但是,如果这样做,您将获得一个与登录表单标题具有相同标题的任务栏按钮。当登录表单关闭时,该任务栏按钮将消失,并且将出现主表单按钮。你可能不满意这看起来如何。

我想您可以尝试将Application.MainFormOnTaskbar设置为False。这样做,应用程序窗口是任务栏按钮后面的窗口。这可能是一个非常剧烈的变化。如果主窗体没有显示,我不是100%确定任务栏按钮会显示,所以这可能是一个死胡同。

答案 2 :(得分:0)

您可能想查看我的答案:

Delphi Change main form while application is running

在其中我展示了如何实现登录表单(在我的情况下实际上是主表单)然后是工作表单(这就是你现在作为主表单)的方法。

我的方法的主要优点:

  • 在完成登录后创建工作表格,它可以根据特定用户信用额度(不同访问级别)轻松动态创建自定义组件部分
  • 它为您提供了一种简单的登录当前用户的方法,而无需关闭整个应用程序。这是可行的,因为工人形式不是应用程序的主要形式,因此可以在不导致应用程序终止的情况下随时销毁。作为应用程序主窗体的登录表单仅在某个用户登录时隐藏。