回 帖 发 新 帖 刷新版面

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

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

回复列表 (共15个回复)

沙发

我也遇到了同样的问题,并且发贴“在15吋液显时运行的表单如何在19吋上美观运行”,向老师请教。有两位老师给提供了两种方法,但还没达到目的。

板凳

若表单不满屏,设置表单为自动居中。若是满屏,想要美观又方便操作,还是在表单的init中根据屏幕尺寸对主要的对象的位置重新赋值,我就是这样做的。编程序,想偷懒是很难的。

3 楼

0901chang.你说的不对,记得过去在张洪举的网站上见过这个程序,是用APL函数编写的,具体是先判断计算机的分辨率,然后再扫瞄表单上的每一个控件,根据扫瞄到的控件扩大控件的尺寸。只要把这个程序放到表单的LNIT事件中就行了。可惜我现在找不到了。另外,不知为啥,现在张的网站打不开了,谁知道?

4 楼

这个问题我以前想过很多。

开始的时候,我在表单init的时候检查屏幕分辨率尺寸,
然后根据这个尺寸的比例,使用变量加减乘除来更改每个控件的大小、位置,
工程已经是很巨大的了。而且语句一多起来,又反过来影响了表单的刷新速度。

结果到最后发现,连字体大小也要改,而且比例更难计算得合适,
然后一气之下,就放弃了这个想法了。

5 楼

如果控件较多,建议还是先设定一个参照物,再根据屏幕的尺寸来定量控件的大小和位置。方法代码应至于“Resize”中,这样控件自会随着表单的变化而变化。

6 楼

控件不多时,自动设置是非常好的。
控件的尺寸是按线数计算的,但字体大小是按磅计算的,当控件很多的时候,它们之间有的时候不一定能整除,所以自动设置不一定美观。不美观的时候,只能是手工去写代码了。

7 楼

**好了,找到了,请你把这个放到表单的LNIT事件中试一试
LOCAL lnHeight, lnWidth, lnHeightdiff, lnWidthdiff  

lnHeight =600 && 原分辩率下的控件高度  
lnWidth = 800 && 原分辩率下的控件宽度  
lnHeightdiff = 0 && 保存不同高度的变量  
lnWidthdiff = 0 && 保存不同宽度的变量  

IF SYSMETRIC(2) <> lnHeight && 如果目前不是运行于 800x600分辩率下  
lnHeightDiff = SYSMETRIC(2) / lnHeight  
lnWidthDiff = SYSMETRIC(1) / lnWidth  
This.Height = This.Height * lnHeightDiff  
This.Width = This.Width * lnWidthDiff  
This.Top = This.Top * lnHeightDiff  
This.Left = This.Left * lnHeightDiff  
  FOR I = 1 TO This.ControlCount  
WITH This.Controls(i)  
       .Height = .Height * lnHeightdiff  
  .Width = .Width * lnWidthdiff  
  .Top = .Top * lnHeightdiff  
  .Left = .Left * lnWidthdiff  
    IF TYPE(".FontSize") # "U"  
&& IF 用于确保控件具有 FontSize 属性  
.FontSize = .FontSize * ((.5 * lnWidthdiff) + (.5 * lnHeightdiff))  
  ENDIF  
ENDWITH  
  ENDFOR  
ENDIF  
ThisForm.Refresh()

8 楼

自动适应不同的计算机分辨率,这个程序是一定要做的,这是没办法的事,否则编的程序只有自己用了,介绍我的方法:
1、主界面无论如何也要满屏处理,控件尽量少一点;
2、次要表单设计调试2-3档可自动适应不同的计算机分辨率,如不在其中,表单居中处理;
3、再次要的表单全部设计600*800界面,居中处理。
因为有主表单在称底,故其它表单不满屏也没关系了!

9 楼

7楼辛苦了
其思路非常到位:遍历所有的控件,然后等比例缩放,但这属于手工调整。

10 楼

非常感谢7楼提供的解决方案,也帮助我解决了在液显15吋时编的表单,19吋显屏不能美观显示的问题。

我来回复

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