Chinaunix首页 | 论坛 | 博客
  • 博客访问: 545065
  • 博文数量: 252
  • 博客积分: 6057
  • 博客等级: 准将
  • 技术积分: 1635
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-21 10:17
文章分类

全部博文(252)

文章存档

2013年(1)

2012年(1)

2011年(32)

2010年(212)

2009年(6)

分类:

2010-07-13 10:02:16

如何创建一个根据屏幕分辩率自动调整的表单

概述  
在一种分辩率下开发的屏幕在另一种分辩率下运行时, 可能与你期望的不同. 一种方案是开发不同分辩率下的多个不同的屏幕, 并在某一分辩率下运行相应的屏幕.  

但是在 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()  
阅读(2548) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-07-13 10:08:58

[delphi组件] TPanel 可以在窗体上加入一个空的面板 http://hi.baidu.com/%B4%BA%B7%E7%B4%F3%D2%D7/blog/item/04af5ec34363f3160ef477a3.html 窗格组件(TPanel)TPanel组件是一个面板组件,使用它可以在窗体上加入一个空的面板。在应用程序的界面中,它起着修饰与隔离其他组件的作用。又作为一个容器,让其他组件放在上面,从而成为它的子组件,可以通过Controls属性访问这些子组件。 1、TPanel组件的典型用法 在窗体中显示图形的时候,一般先添加一个TPanel组件,然后在上面再添加Image组件。这样在图形显示的时候,可以用 TPanel组件的边框做边界。 TPanel组件还可以用做分组组件,例如将多个TCheckBox或TRadioButton组件分为一组。 可通过设置BevelInner属性和BevelOuter属性来改变TPanel组件的边框样式。 2、TPanel组件的重要属性 Alignment-------此属性用于设置窗格的标题在窗格上的排列

chulia200020012010-07-13 10:06:44

delphi 程序窗体及控件自适应分辨率 http://hi.baidu.com/%B6%FA%D7%D3/blog/item/51d9d1379d37a51b91ef39d6.html 代码如下: unit untFixForm; interface uses Classes, SysUtils, Controls, Forms; type TFontedControl = class(TControl) public property Font; end; TFontMapping = record SWidth : Integer; SHeight: Integer; FName: string; FSize: Integer; end; procedure FixForm(AForm: TForm); procedure SetFontMapping; var FontMapping : array of TFontMapping; implementation