在全屏启动时,应用程序停留在任务栏后面

时间:2011-02-09 06:51:34

标签: delphi

这是我正在使用的代码:

BorderStyle := bsNone;
WindowState := wsMaximized;

我的问题是应用程序不会覆盖任务栏,而是支持任务栏。

在运行时切换到全屏时效果很好,但在系统启动时启动应用程序时无法正常工作。

更新

事实证明,这两条线路运作良好。它们位于FormShow事件处理程序中。如果我在FormShow结束时断点,应用程序似乎全屏;我可以通过任务栏看到该应用程序。但是在FormShow之后,应用程序的Top属性会以某种方式发生变化。我不会在代码中更改它 - 值为-20,因此应用程序不再最大化。

有没有办法追踪更改的位置或时间?

提前致谢!

更新

此帖已被标记。请不要发布任何答案!谢谢。

2 个答案:

答案 0 :(得分:3)

根据此MSDN博客更改参数样式: http://blogs.msdn.com/b/oldnewthing/archive/2005/05/05/414910.aspx

procedure TForm1.CreateParams(var Params: TCreateParams); 
begin
  inherited; 
  Params.Style := WS_POPUP or WS_VISIBLE; //will overlay taskbar
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Self.WindowState := wsMaximized; //fullscreen
end;

====================================

从Windowed切换到全屏模式并返回的完整代码(在Win7 64bit,Aero上测试)
(编辑:也适用于Windows XP(vmware))

var
  _OrgWindowedStyle: DWORD;

procedure TForm6.btnWindowedClick(Sender: TObject);
begin
  Self.WindowState := wsNormal;
  //set original style
  SetWindowLong( Application.Handle, GWL_STYLE,
                 _OrgWindowedStyle);
  //re-create window, to use changed style
  RecreateWnd;
end; 

procedure TForm6.btnFullScreenClick(Sender: TObject);
begin
  _OrgWindowedStyle := 0;  //clear: re-applies fullscreen mode in CreateParams
  Self.WindowState  := wsMaximized;
  //re-create window, to use changed style
  RecreateWnd;
end;

procedure TForm6.CreateParams(var Params: TCreateParams);
begin
  inherited;

  //first time? default fullscreen
  if _OrgWindowedStyle = 0 then
  begin
    _OrgWindowedStyle := Params.Style;
    Params.Style := //WS_POPUP or               //not needed?
                    WS_VISIBLE
                    or WS_BORDER or WS_CAPTION  //comment this line to remove border + titlebar
  end;
end;

procedure TForm6.FormCreate(Sender: TObject);
begin
  Self.WindowState := wsMaximized;     //default fullscreen
end;

答案 1 :(得分:1)

尝试:

Form.Left := 0; // set the x
Form.Top := 0; // set the y
Form.Width := Screen.Width; // width of the form
Form.Height := Screen.Height; // height of the form
// and
Form.FormStyle := fsStayOnTop; // taskbar is always on top as well, setting the Style property to always on top will allow the form to cover the taskbar

如果您想隐藏标题,请将borderstyle设置为bsnone