根据屏幕分辨率高速应用程序

Author: 王守银 Date: 2001年 44期

?牐犜谑褂肰FP 6.0系统开发各类应用系统过程中,许多编程人员都遇到这样一个问题:由于受系统用户计算机硬件配置情况和系统开发要求的限制,一般情况下,系统表单设计是基于一定的计算机屏幕分辨率来确定位置和大小的,那么这个应用程序在对应的计算机屏幕分辨率下显示是正常的,但如果运行这个表单在不同的屏幕分辨率下,显示可能就不是所希望的那样,这就造成了编写的应用系统通用性不强。解决这个问题当然也可以通过在开发过程中设计在计算机不同屏幕分辨率下使用的表单,运行时根据当前计算机的分辨率调用不同的表单,这样虽然可以解决系统表单的显示问题,但也大大增加了系统开发的强度和工作量,在实际应用中并不适用。其实要解决这个问题可以通过根据当前计算机屏幕的分辨率动态调整表单大小和表单中各控件的位置和大小,来实现应用程序屏幕分辨率的自适应,下面介绍这种功能实现的方法。
  ?牐?1.如在计算机屏幕分辨率不到640×480情况下创建一个新表单,表单中添加一些常用控件如文本框,命令按扭和标签等到表单中;
  ?牐?2.将以下代码放入表单的Init事件和所有的容器控件中Init事件(如容器、页框中的页等)中:
  ?牐燣ocal lnHeight,lnWidth,lnHeightdiff,lnWidthdiff
  ?牐燳H=480 && 原分辨率下的高度
  ?牐燳W=640 && 原分辨率下的宽度
  ?牐燞BL=0 && 保存不同分辨率的变量
  ?牐燱BL=0 && 保存不同宽度的变量
  ?牐營F SYSMETRIC(2)<>YH
  ?牐?&& 如果目前不是运行于640×480分辨率下,获得当前分辩率与设计分辨率高和宽的比例值
  ?牐燞BL=SYSMETRIC(2)/YH
  ?牐燱BL=SYSMETRIC(1)/YW
  ?牐?&&如果是容器对象或其它非表单对象,需要注释掉下面这四行代码
  ?牐燭HIS.Height=THIS.height*HBL
  ?牐燭HIS.Width=THIS.Width*WBL
  ?牐燭HIS.Top=THIS.Top*HBL
  ?牐燭HIS.Left=THIS.Left*WBL
  ?牐?&&下面代码是遍历所属各对象,重新调整各对象的大小和位置
  ?牐燜OR i = 1 to THIS.ControlCount
  ?牐燱ITH THIS.controls(i)??
  ?牐?.Height=.Height*HBL
  ?牐?.Width=.Width*WBL
  ?牐?.Top=.Top*HBL
  ?牐?.Left=.Left*WBL
  ?牐?&&如果控件拥有FontSize属性,则调整修改各对象中的FontSize属性值来重新确定对象字体大小。
  ?牐?&&值得注意的是在一些较高分辨率下,计算机屏幕会在一定程序下改变字体,因此要对系统进行测试
  ?牐營F TYPE(".FontSize") # "U"
  ?牐?.FontSize=.Fontsize*((.5*WBL)+(.5*HBL))?牐?
  ?牐燛NDIF
  ?牐燛NDWITH
  ?牐燛NDFOR
  ?牐燛NDIF
  ?牐燭HISFORM.Refresh
  ?牐?3.保存这个表单,调整计算机屏幕分辨率,在不同分辨率下运行这个表单,我们能看到,现在的这个表单会根据分辨率的不同自动调整对象的大小和位置,使得设计的表单不会因为分辨率的改变而发生变化,这样就实现了应用程序表单对不同分辨率的自适应。
  ?牐犚陨辖樯艿氖且恢质迪钟τ贸绦虮淼ナ视Σ煌聊环直媛实姆椒ǎ菡飧鲈砑纯杀喑龈邮涤玫挠τ贸绦颍行巳さ亩琳卟环烈皇浴?