DELPHI5开发的程序,在XP界面下会出现不满屏(最大化) ( 积分: 300 )

  • 主题发起人 主题发起人 rogue
  • 开始时间 开始时间
R

rogue

Unregistered / Unconfirmed
GUEST, unregistred user!
如题
请帮忙想想办法吧,除了升级DELPHI的办法喔

谢谢,300白银奉上
 
这个我也有遇到过,你可要把分给我哦,呵呵.
在主表单formshow里面加入:
self.Height:=(screen.Height-203) div 2;
self.Width:=(screen.Width-218) div 2;
即可,我已经处理好了.但如果是在win2k里面就会出现你所讲的问题,需要加以判断,我是这样做的:如果是winxp才生效,否则不执行
if pos(win_xp,GetOSInfo())>0 then
begin
self.Height:=(screen.Height-203) div 2;
self.Width:=(screen.Width-218) div 2;
end;
 
把windowState先覆值为nomal,再覆值为max试试
 
form 的 position:=poDesigned 即不要改动 默认;
然后 windowState := wsMaximized ;
我已经用了很长时间了,什么系统 都可以;
 
procedure TfrmBaseForm.SetMaximize; //设置窗口最大化时适应XP
var
hApp: HWND;
rcApp, rcWork: TRect;
begin
rcWork.top := 0;
rcWork.left := 0;
rcWork.Bottom := GetSystemMetrics(SM_CYSCREEN);
rcWork.Right := GetSystemMetrics(SM_CXSCREEN);

hApp := FindWindow('Shell_TrayWnd', '');
if hApp <> 0 then begin
{ get the size of the taskbar }
GetWindowRect(hApp, rcApp);
{ cut the workarea to place the taskbar }
if rcApp.Right < rcWork.Right then
rcWork.left := rcApp.Right; { bar on left edge }
if rcApp.Bottom < rcWork.Bottom then
rcWork.top := rcApp.Bottom; { bar on top edge }
if rcApp.left > 0 then
rcWork.Right := rcApp.left; { bar on right edge }
if rcApp.top > 0 then
rcWork.Bottom := rcApp.top; { bar on bottom edge }
end;

{ set workarea }
Constraints.MaxHeight := rcWork.Bottom - rcWork.top;
Constraints.MaxWidth := rcWork.Right - rcWork.left;
end;
 
self.BoundsRect := Screen.WorkAreaRect;

放到你的FORM的SHOW里试试。
 
太历害了,三种方案
简易 都有
我会把试过的结果回复大家的!
 
好像不止三种方案喔[:D]

第一种
begin
self.Height:=(screen.Height-203) div 2;
self.Width:=(screen.Width-218) div 2;
end;

结果:没有问题喔在宽频下也没有问题


第二种
把windowState先覆值为nomal,再覆值为max试试

结果:不行喔,没反应的



第三种
form 的 position:=poDesigned 即不要改动 默认;
然后 windowState := wsMaximized ;

结果:NB啊,

全部是DELPHI的属性调一调就OK了,最省事
windowState := wsMaximized这个可以设置属性,也可以在OnFormShow中写
都行,我想我会用这个了!


第四种:
self.BoundsRect := Screen.WorkAreaRect;

结果: D5中没找到Screen.WorkAreaRect,所以没法试喽

第五种:
var
hApp: HWND;
rcApp, rcWork: TRect;
begin
rcWork.top := 0;
rcWork.left := 0;
rcWork.Bottom := GetSystemMetrics(SM_CYSCREEN);
rcWork.Right := GetSystemMetrics(SM_CXSCREEN);

hApp := FindWindow('Shell_TrayWnd', '');
if hApp <> 0 then begin
{ get the size of the taskbar }
GetWindowRect(hApp, rcApp);
{ cut the workarea to place the taskbar }
if rcApp.Right < rcWork.Right then
rcWork.left := rcApp.Right; { bar on left edge }
if rcApp.Bottom < rcWork.Bottom then
rcWork.top := rcApp.Bottom; { bar on top edge }
if rcApp.left > 0 then
rcWork.Right := rcApp.left; { bar on right edge }
if rcApp.top > 0 then
rcWork.Bottom := rcApp.top; { bar on bottom edge }
end;

{ set workarea }
Constraints.MaxHeight := rcWork.Bottom - rcWork.top;
Constraints.MaxWidth := rcWork.Right - rcWork.left;
end;

结果:这个一看就知道可能是外国牛人写的,根据开始菜单位判断
我想应该行吧,但是我不想试了,因为找到最佳答案了!



每人都有分,采用谁的当然给最高分喽

谢谢大家捧场啊!
 
等楼主用D7时,所有的分都应该给我。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部