主题:如何使表单大小适应不同计算机的分辨率
lym2009
[专家分:40] 发布于 2009-09-08 10:19:00
我过去在WIN98中编写的程序,是在分辨率在600X900中设计的,现在大多数计算机都换成了1024X768,我又不想一个表单一个表单修改,请哪位朋友给我提供一个程序,放在主程序中就能完成表单适应不同的计算机分辨率。最好用注解说明,好让我学习。
回复列表 (共15个回复)
沙发
myww [专家分:1190] 发布于 2009-09-08 11:02:00
我也遇到了同样的问题,并且发贴“在15吋液显时运行的表单如何在19吋上美观运行”,向老师请教。有两位老师给提供了两种方法,但还没达到目的。
板凳
0901chang [专家分:10660] 发布于 2009-09-08 16:28:00
若表单不满屏,设置表单为自动居中。若是满屏,想要美观又方便操作,还是在表单的init中根据屏幕尺寸对主要的对象的位置重新赋值,我就是这样做的。编程序,想偷懒是很难的。
3 楼
lym2009 [专家分:40] 发布于 2009-09-08 16:55:00
0901chang.你说的不对,记得过去在张洪举的网站上见过这个程序,是用APL函数编写的,具体是先判断计算机的分辨率,然后再扫瞄表单上的每一个控件,根据扫瞄到的控件扩大控件的尺寸。只要把这个程序放到表单的LNIT事件中就行了。可惜我现在找不到了。另外,不知为啥,现在张的网站打不开了,谁知道?
4 楼
moz [专家分:37620] 发布于 2009-09-08 20:43:00
这个问题我以前想过很多。
开始的时候,我在表单init的时候检查屏幕分辨率尺寸,
然后根据这个尺寸的比例,使用变量加减乘除来更改每个控件的大小、位置,
工程已经是很巨大的了。而且语句一多起来,又反过来影响了表单的刷新速度。
结果到最后发现,连字体大小也要改,而且比例更难计算得合适,
然后一气之下,就放弃了这个想法了。
5 楼
妙计山人 [专家分:130] 发布于 2009-09-08 21:10:00
如果控件较多,建议还是先设定一个参照物,再根据屏幕的尺寸来定量控件的大小和位置。方法代码应至于“Resize”中,这样控件自会随着表单的变化而变化。
6 楼
0901chang [专家分:10660] 发布于 2009-09-08 22:54:00
控件不多时,自动设置是非常好的。
控件的尺寸是按线数计算的,但字体大小是按磅计算的,当控件很多的时候,它们之间有的时候不一定能整除,所以自动设置不一定美观。不美观的时候,只能是手工去写代码了。
7 楼
lym2009 [专家分:40] 发布于 2009-09-09 13:44:00
**好了,找到了,请你把这个放到表单的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 楼
yjr3032570 [专家分:3360] 发布于 2009-09-09 15:07:00
自动适应不同的计算机分辨率,这个程序是一定要做的,这是没办法的事,否则编的程序只有自己用了,介绍我的方法:
1、主界面无论如何也要满屏处理,控件尽量少一点;
2、次要表单设计调试2-3档可自动适应不同的计算机分辨率,如不在其中,表单居中处理;
3、再次要的表单全部设计600*800界面,居中处理。
因为有主表单在称底,故其它表单不满屏也没关系了!
9 楼
0901chang [专家分:10660] 发布于 2009-09-09 15:10:00
7楼辛苦了
其思路非常到位:遍历所有的控件,然后等比例缩放,但这属于手工调整。
10 楼
myww [专家分:1190] 发布于 2009-09-09 15:54:00
非常感谢7楼提供的解决方案,也帮助我解决了在液显15吋时编的表单,19吋显屏不能美观显示的问题。
我来回复