我有一个没有标题的表单,使用双击最大化:代码如下所示:
procedure xxxxxx; begin if Form1.WindowState=wsNormal then begin Form1.WindowState:=wsMaximized; Form1.SetBounds(0,0,screen.Width,screen.Height-getHeightOfTaskBar); end else begin Form1.WindowState:=wsNormal; end; ShowTrayWindow; end; function getHeightOfTaskBar : integer; var hTaskBar:HWND; rect : TRect; begin hTaskbar := FindWindow('Shell_TrayWnd', Nil ); if hTaskBar<>0 then GetWindowRect(hTaskBar, rect); Result:=rect.bottom - rect.top; end;
这很好,除了我必须找出任务栏重置SetBounds的位置...
这样做的正确方法是什么?
谢谢.
听起来不错,但就像Drejc指出的那样,任务栏可以出现在任何地方,因此Google桌面,Winamp等其他对接侧边栏也可以出现.
而是使用像Screen.WorkAreaRect这样的东西来获取屏幕的客户区域.例如
with Screen.WorkAreaRect do Form1.SetBounds(Left, Top, Right - Left, Bottom - Top);