我使用delphi XE2。在我的主窗体OnCreate过程中,我运行了一些重要元素,如登录过程等。我的问题是,当我显示登录表单(由OnCreate程序调用)时,我的应用程序在TaskBar上不可见 - 当主表单变得可见时它变得可见。问题是,当用户用另一个应用程序覆盖我的登录表单时,在taskBar上没有图标,他可能不知道我的应用程序已经运行并尝试再次启动它。他必须使用ctrl + tab来获取我的应用程序登录表单。
现在提问...当OnCreate程序没有完成时,如何强制应用程序/操作系统在任务栏上显示应用程序图标?
问候 马里奥
答案 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
在其中我展示了如何实现登录表单(在我的情况下实际上是主表单)然后是工作表单(这就是你现在作为主表单)的方法。
我的方法的主要优点: