如果预测窗体最大化时的大小?(100分)

  • 主题发起人 主题发起人 barton
  • 开始时间 开始时间
B

barton

Unregistered / Unconfirmed
GUEST, unregistred user!
窗体最大化时的大小等于Screen的大小减去任务栏的大小。关键不知道
任务栏的大小。

多事的人会问,你要这个数字干吗?呵呵...反正有用...

我希望在窗体启动时设置初始大小为最大化时的大小,但并不盖住任
务条,但又不希望窗体已经最大化。
 
你可以得到TaskBar的窗口类(可以使用Visual Studio Spy++),
再使用FindWindow可以得到TaskBar的窗口句柄,然后什么都知道了。
比如,使用GetWindowRect可以得到TaskBar的大小,等等。
本来,我可以帮你查到TaskBar的窗口类的,但今天特别不顺利,
Delphi被IE5搞死了!刚刚重装系统,还没来得及装Visual Studio.
希望这些对你有用!
 
正常来说,form在最大化时是由windows控制的,即使在动态改变windows 外观
时,application也会自己适应大小,不知你的意思是什么,是在应用程序开始时设置成
最大化时的大小,而不是使它最大化?如果是这样的话,可以用wm_getminmaxinfo来解决.
 
好象有desktop的现成函数.
 
form.width := screen.width;
form.height := screen.height;
 
Form有三种状态:Maximized, minimized和Normal,一般Normal取设计时的窗体
大小,但当时不知运行时的屏幕大小,我希望运行时Normal的大小和Maximized
时的大小相同.如果设置成Screen的大小,显然窗体会盖住TaskBar.而这不是我
希望的.Jimchael Tsee的方法是一般的思路,Spy++能找到TaskBar的窗口句柄
也没错,不过我认为这一定是个特殊的窗口.到底这个窗口是否有一个唯一的
指征来Find,我有些怀疑.

BTW:TaskBar可以在底部,也可以在顶部或左右两边哦!除了找到TaskBar的宽度
和高度外,还得找到它的位置.

cytown:desktop函数怎么用?
 
hehe,小傻有个笨方法就是你生成一个窗口,把他放成最大化,然后读出它的窗口大小

比较幼稚的想法,不过我试了一试,比较容易实现,而且可以在启动程序时加入一个
Login,在其结束的时候让他最大化一下,然后让他关闭,可以做的不知不觉中测了
一把

呵呵,小傻就是傻,方法很傻的,望谅
 
无论TaskBar在底部,在顶部或左右两边,
如下:
procedure TForm1.FormCreate(Sender: TObject);
VAR
; lpRect:tRect;
begin
; SystemParametersInfo(SPI_GETWORKAREA,0,@lpRect,0);
; form1.Left :=lpRect.left;
; form1.Top ;:=lpRect.Top;
; form1.width :=(lpRect.right-lpRect.left);
; form1.Height:=(lpRect.bottom-lpRect.Top);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
; x,y:trect;
; b:hwnd;
; i,j:integer;
begin
; b:=findwindow('Shell_TrayWnd',nil);

;if windows.GetWindowRect(b,x) then
;begin
; ;windows.GetWindowRect(GetDesktopWindow,y);
; ;if (x.Right>=y.Right) and (x.left<=0) then
; ;begin
; ; ;i:=y.right;
; ; ;if x.Bottom>=y.Bottom then
; ; ; ;j:=x.top
; ; ;else
; ; ; ;j:=y.Bottom-x.Bottom
; ;end
; ;else
; ;begin
; ; ;j:=y.Bottom;
; ; ;if x.right>=y.right then
; ; ; ;i:=x.left
; ; ;else
; ; ; ;i:=y.right-x.right;
; ;end;
; ;showmessage(inttostr(i)+':'+inttostr(j));
;end;
end;
 
还是Liuge答的好。
 
接受答案了.
 
学习了一手~
 
后退
顶部