打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
创建一个根据屏幕分辩率自动调整的表单
概述  
在一种分辩率下开发的屏幕在另一种分辩率下运行时, 可能与你期望的不同. 一种方案是开发不同分辩率下的多个不同的屏幕, 并在某一分辩率下运行相应的屏幕.  

但是在 Visual FoxPro 中, 可以根据当前分辩率动态调整屏幕大小并重新安排对象. 本文用例子演示了如何这样做.  

更多信息  

逐步示例  
在 640x480 分辩率下创建一个新表单. 添加一些文本框, 命令按钮和标签这样的控件到表单.  

将以下代码放入表单的 Init 事件中和表单中的任何窗口任何容器对象(如页框中的页)的 Init 事件中:  

** 假定屏幕是在 640x480 下创建的  
LOCAL lnHeight, lnWidth, lnHeightdiff, lnWidthdiff  

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

IF SYSMETRIC(2) <> lnHeight && 如果目前不是运行于 640x480 分辩率下  
lnHeightDiff = SYSMETRIC(2) / lnHeight  
lnWidthDiff = SYSMETRIC(1) / lnWidth  

** 如果是在容器对象(如页框中的页等非表单且具有 ControlsCount 属性的容器)的 Init 事件中, 你需要注  
** 释掉以下代码直到 ENDIF 代码行.  

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  

** 你也可以在这里修改 FontSize 属性来重调字体  
** IF TYPE(".FontSize"
# "U"  
** && IF 用于确保控件具有 FontSize 属性  
** .FontSize = .FontSize * ((.5 * lnWidthdiff) + (.5 * lnHeightdiff))  
** ENDIF  
** 但是, 一些较高的屏幕分辩率会适当地修改字体外观, 因此在试以上代码前应进行测试.  

ENDWITH  
ENDFOR  
ENDIF  

ThisForm.Refresh()  

在表同分辩率下运行表单. 可以观察到它们的自动适应
---------------------------------------------------------------

你把以下代码写入你的Form的Init事件中
*********************************

LOCAL lnHeight, lnWidth, lnHeightdiff, lnWidthdiff  

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

IF SYSMETRIC(2) <> lnHeight && 如果目前不是运行于 640x480 分辩率下  
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()
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
看实例学VFP:复选框控件
在VFP中实现文字显隐的动画效果
看实例学VFP:页框控件的使用
GDI+ FFC图形类
如何在VFP中实现动态统计图形[5]
vfp a表单调用B表单,等B表单关闭才能关闭a表单
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服