主题:如何使表单大小适应不同计算机的分辨率
lym2009
[专家分:40] 发布于 2009-09-08 10:19:00
我过去在WIN98中编写的程序,是在分辨率在600X900中设计的,现在大多数计算机都换成了1024X768,我又不想一个表单一个表单修改,请哪位朋友给我提供一个程序,放在主程序中就能完成表单适应不同的计算机分辨率。最好用注解说明,好让我学习。
回复列表 (共15个回复)
11 楼
妙计山人 [专家分:130] 发布于 2009-09-10 08:50:00
山人也找出了一段类似的代码:
local oleheight,olewidth,changeheight,changewidth
oleheight=1024
olewidth=768
changeheight=0
changewidth=0
if SYSMETRIC(1)=oleheight
thisform.lockscreen=.t.
changeheight=SYSMETRIC(1)/oleheight
changewidth=SYSMETRIC(2)/olewidth
if thisform.baseclass="form"
this.height=SYSMETRIC(1)&&this.height*changeheight
this.width=SYSMETRIC(2)&&this.width*changewidth
&&this.top=this.top*changeheight
&&this.left=this.left*changewidth
endif
for i=1 TO this.controlcount
with this.controls(i)
.height=this.height*changeheight
.width=this.width*changewidth
.top=this.top*changeheight
.left=this.left*changewidth
ENDWITH
endfor
thisform.lockscreen=.f.
ENDIF
Thisform.Refresh
可惜这段代码放在山人的表单中,根本就解决不了任何问题。
应该说,这段代码有其局限性,通常表单的尺寸在使用中是会变的,或放大,或缩小,所以这样的通用代码自然难以满足要求。
12 楼
Gleam [专家分:3100] 发布于 2009-09-14 16:31:00
有个最简单的办法,就是调整显示器的分辨率。
在程序初始的时候读取当前显示器的分辨率,并纪录,然后将分辨率调整为你设计的分辨率上,当程序退出时,返回系统原来的分辨率。
调整显示器分辨率的代码参考api手册
13 楼
hwy5001 [专家分:0] 发布于 2011-03-26 14:14:00
fenbl1q=SYSMETRIC(1)
fenbl2q=SYSMETRIC(2)
fenblx=1024
fenbly=768
IF fenblx<>fenbl1q OR fenbly<>fenbl2q
DO fenbl
ENDIF
14 楼
hwy5001 [专家分:0] 发布于 2011-03-26 14:15:00
fenbl代码
If Sysmetric(1)<>fenblx OR Sysmetric(2)<>fenbly
Local lcDevMode
lcDevMode=Replicate(Chr(0),156)
Declare Integer EnumDisplaySettings In user32 Integer,Integer,String @
Declare Integer ChangeDisplaySettings In user32 String @,Integer
EnumDisplaySettings(0,4294967295,@lcDevMode)
lcDevMode=Stuff(lcDevMode,109,8,Chr(fenblx%256)+Chr(fenblx/256)+Chr(0)+Chr(0)+Chr(fenbly%256)+Chr(fenbly/256)+Chr(0)+Chr(0))
ChangeDisplaySettings(@lcDevMode,1)
Clear Dlls [ChangeDisplaySettings]
Clear Dlls [EnumDisplaySettings]
Endif
**********改变分辨率的VFP代码
15 楼
hwy5001 [专家分:0] 发布于 2011-03-26 14:19:00
以上2段代码的意思是;检测原来的屏幕分辨率保存在变量中。改变屏幕分辨率为1024*768,如果原分辨率为1024*768则不改变。
我来回复