Delphi 应用程序 实现“F11全屏”  
官方Delphi 学习QQ群: 682628230(三千人)
频道

Delphi 应用程序 实现“F11全屏”


全屏运行你的 Delphi 应用程序——实现“F11——全屏”


F11 全屏模式我想您知道您可以使用 F11 快捷键以全屏模式运行浏览器。Windows 资源管理器也支持此功能。


在全屏模式下运行,其中应用程序 UI 覆盖整个屏幕、任务栏和任何桌面/工具栏,当用户的屏幕尺寸有限(笔记本电脑)或当您只想通过浏览器或Windows 资源管理器。


如果您的用户只想专注于您的应用程序的窗口,那么全屏运行您的应用程序也可能会很方便。


F11 – 全屏

全屏意味着“全屏”——应用程序的 UI 位于任务栏或任何其他工具栏的“顶部”——应用程序的整个 UI 覆盖 Windows 桌面(如果有多个显示器:监控应用程序所在的位置)。


如果您的应用程序中有一个主菜单,您可以添加一个“全屏”菜单项,并为其分配“F11”键作为Shortcut属性。


下面是如何允许切换到全屏视图并返回到“正常”视图——考虑到在您的应用程序进入“全屏”模式之前“正常”是什么。


{$J+} //writeable constants on

const

  rect: TRect = (Left:0; Top:0; Right:0; Bottom:0);

  ws : TWindowState = wsNormal;

{$J-} //writeable constants off

var

  r : TRect;

begin

  if BorderStyle <> bsNone then

  begin

    ws := WindowState;

    rect := BoundsRect;

    BorderStyle := bsNone;

    r := Screen.MonitorFromWindow(Handle).BoundsRect;

    SetBounds(r.Left, r.Top, r.Right-r.Left, r.Bottom-r.Top) ;

  end

  else

  begin

    BorderStyle := bsSizeable;

    if ws = wsMaximized then

      WindowState := wsMaximized

    else

      SetBounds(rect.Left, rect.Top, rect.Right-rect.Left, rect.Bottom-rect.Top) ;

  end;

end;

上面的代码假定当不是全屏模式时你的主窗口有一个边框——即BorderStyle不是bsNone。


为了获得全屏的大小,使用了 Screen 全局变量的MonitorFromWindow方法。MonitorFromWindow检索与指定窗口(在本例中为您的主窗体)的边界矩形交叉区域最大的监视器 ( TMonitor )。


所述BoundsRect属性给出显示器的像素,其中,(0,0)表示监视器的左上角的尺寸。BoundsRect 属性不考虑停靠在监视器上的任何任务栏或工具栏。


通过使用“{$J+}”和“{$J-}”,代码中声明的类型化常量(“rect”和“ws”)是可写的——当上面的代码被多次调用时,它们的值不会丢失次。


因此:如果 BorderStyle 不是 bsNone 我们假定我们不是在全屏模式。为了进入全屏模式,我们将 BorderStyle 属性设置为 bsNone 并使用 SetBounds 一次性设置主窗体的 Left、Top、Width 和 Height 属性。


我们还将主窗口的当前边界与 WindowStyle 一起存储 - 当从全屏返回以恢复主应用程序窗口的 UI 的最后状态时。


注意:要填充可用区域(不隐藏任务栏),您可以使用



var

   r : TRect;

begin

   Borderstyle := bsNone;

   SystemParametersInfo(SPI_GETWORKAREA, 0, @r,0) ;

   SetBounds(r.Left, r.Top, r.Right-r.Left, r.Bottom-r.Top) ;

end;

就是这样。去全屏!



推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.066443920135498 seconds