回 帖 发 新 帖 刷新版面

主题:如何使表单大小适应不同计算机的分辨率

我过去在WIN98中编写的程序,是在分辨率在600X900中设计的,现在大多数计算机都换成了1024X768,我又不想一个表单一个表单修改,请哪位朋友给我提供一个程序,放在主程序中就能完成表单适应不同的计算机分辨率。最好用注解说明,好让我学习。

回复列表 (共15个回复)

11 楼

山人也找出了一段类似的代码:
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 楼

有个最简单的办法,就是调整显示器的分辨率。
在程序初始的时候读取当前显示器的分辨率,并纪录,然后将分辨率调整为你设计的分辨率上,当程序退出时,返回系统原来的分辨率。
调整显示器分辨率的代码参考api手册

13 楼

fenbl1q=SYSMETRIC(1)
fenbl2q=SYSMETRIC(2)

fenblx=1024
fenbly=768
IF fenblx<>fenbl1q OR fenbly<>fenbl2q
DO fenbl
ENDIF 

14 楼

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 楼

以上2段代码的意思是;检测原来的屏幕分辨率保存在变量中。改变屏幕分辨率为1024*768,如果原分辨率为1024*768则不改变。

我来回复

您尚未登录,请登录后再回复。点此登录或注册