我有一个没有标题的窗体,双击时使用最大化:代码如下所示:
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 ...
正确的方法是什么?
谢谢.
3条答案
按热度按时间rnmwe5a21#
听起来不错,但就像Drejc指出的那样,插件可以出现在任何地方,所以也可以附加停靠的侧边栏,如谷歌桌面,Winamp等。
相反,也许可以使用类似于Screen.WorkAreaRect的东西来获取屏幕的工作区。
字符串
6ju8rftf2#
一个额外的提示。任务栏也可以位于屏幕的右侧或左侧(不仅是顶部和底部)。所以你必须额外弄清楚任务栏在哪里。
我建议你看看SetWidnowState的 Delphi 实现。在Delphi 7中,它是代码的这一部分:
字符串
ShowWindow是一个Win32库调用:
型
where * user 32 = 'user32.dll';* 如果我没有弄错的话。所以深入研究这个库,也许在某个地方有一些任务栏的信息。
mm9b1k5b3#
请使用这一行代码来最大化表单:
字符串