为各种主机环境编程

由于Windows环境本身的特性,有很多因素随用户偏爱或配置而不同。下列因素会影响发
布到其他计算机的应用程序:

· 屏幕分辨率和颜色浓度。
· 字体。
· Windows版本。
· 辅助应用程序。
· DLL位置。

一、 屏幕分辨率和颜色浓度

  Windows桌面的大小和计算机上可用的颜色数是可配置的并依赖于安装的硬件。在开发程
序的计算机上的这些属性有可能与那些在发布的计算机上的对应属性不同。在设置了不同屏
幕分辨率的计算机上,应用程序的外观(窗口、对象及字体大小)可用下列方法被处理:

· 为有最低分辨率(通常为640×480)的用户设计应用程序。不用采取特殊动作动态缩放对
象,使之根据计算机屏幕显示改变比例。在视觉上,设置更高分辨率后对象将变小。

· 在开发计算机上使用任意屏幕分辨率设计,并且在运行时动态缩放所有的窗体和对象以适
应开发和发布计算机的屏幕分辨率之间的差别(屏幕分辨率差别比率)。

· 在开发计算机上使用任意屏幕分辨率设计,并且在运行时仅动态缩放应用程序的窗体。根
据可视控件在窗体中的位置,这可能需要窗体可滚动,以便用户能访问在窗体上所有控件。

1)不动态缩放时的考虑
如果组成应用程序的窗体和可视控件不在运行时动态缩放,应使用最低分辨率设计应用
程序的单元。否则,应用程序在一台设置的屏幕分辨率比开发计算机低的计算机上运行时,
应用程序的窗体可能超出屏幕的边界。

例如,如果开发计算机设置屏幕分辨率为1024×768,窗体的宽度设计为700像素,那么
在一台屏幕分辨率设置为640×480的计算机上,窗体将不会全部显示在Windows桌面之内。

2)动态缩放窗体及控件时的考虑
如果应用程序的窗体和可视控件可动态缩放,需调整缩放进程各个方面以在所有可能的
屏幕分辨率下保证应用程序具有最佳外观。下面是动态缩放应用程序的可视单元应考虑的一
些因素:

· 根据开发计算机与要把应用程序安装到其上的计算机的屏幕分辨率,计算窗体和可视控件
缩放的比例。使用常数代表开发计算机上屏幕分辨率的大小:可以是以像素计算的高度或宽
度。在运行时使用TScreen::Height或TScreen::Width属性获取用户计算机的对应数值。用开
发计算机的值除以用户计算机的值导出在两台计算机之间的屏幕分辨率差别比例。

· 通过减少或增加单元的大小和改变其在窗体上的位置缩放应用程序的可视单元(窗体和控
件)。缩放按开发和用户计算机的屏幕分辨率之间的差别比例进行。缩放和重定位窗体上的
可视控件可通过将窗体的TCustomForm::Scaled属性设为true并调用其TWincontrol::ScaleB
y方法自动进行。ScaleBy方法不会改变窗体的高度和宽度。需自行用屏幕的Height和Width属
性当前值乘上分辨率差别比例。

· 可以不使用TWincontrol::ScaleBy方法自动缩放,而通过在循环引用每个可视控件中并设
置其尺寸和位置自行缩放窗体上的控件。用可视控件的Height和Width属性值乘上屏幕分辨率
差别比例。用可视控件的Top和Left属性值乘上屏幕分辨率差别比例重定位可视控件。

· 如果设计应用程序的计算机设置了比用户计算机低的屏幕分辨率,字体大小将在按比例缩
放可视控件的进程中被减小。如果在设计时字体大小已经太小,在运行时字体可能会被缩小
到不可读。

例如,窗体的缺省字体大小是8。如果开发计算机的屏幕分辨率为640×480而用户的计算
机为1024×768,可视控件尺寸将按0.625的比例减小(640/1024=0.625)。原来的字体大小
8被减小为5(8×0.625=5)。当Windows以减小的字体大小显示应用程序的文本时会挤在一起
并且不可读。

· 有一些可视控件,如TLabel和TEdit,当控件的字体大小变化时会动态地缩放。当窗体和控
件动态缩放时,这会影响发布应用程序。控件除根据屏幕分辨率差别比例缩放外,还会因字
体大小变化而缩放。这种效果可以通过将这些控件的AutoSize属性设为false来禁用。

· 避免使用显式的像素坐标,例如当直接在画布中绘制时。应按开发和用户计算机之间的屏
幕分辨率差别比例相应修改坐标。例如,如果应用程序在画布中绘制一个高10个、宽20像素矩
形,应分别把10和20乘上屏幕分辨率差别比例。这可确保矩形在不同的屏幕分辨率下看起来显
得大小一样。

3)调整颜色浓度变化
要考虑所有的没有设置相同的可用颜色数的发布计算机,最安全的方法是在图形中使用最
少的颜色数。尤其是对glyphs控件,它通常只应使用16色的图形。要显示图像,可以按不同的
分辨率和颜色浓度提供图像的多个拷贝或在应用程序中解释最小分辨率和颜色要求。


二、字体

Windows附带标准的TrueType和点阵(raster)字体集。当设计需要发布到其他计算机上
的应用程序时,应考虑到不是所有的计算机都有Windows标准字体集之外的字体。应用程序使
用的文本组件都应该使用在所有的发布计算机上都可用的字体。当应用程序绝对必要使用非
标准字体时,需要将那种字体与应用程序一起发布。安装程序或应用程序本身必须在发布计
算机上安装字体。第三方字体的发布应服从于字体开发者作出的限制。Windows有一项安全措
施来处理试图使用计算机上不存在的字体。它用匹配最好的现存字体来代替。这可以绕过有
关找不到字体的错误,但结果可能会损害应用程序的可视外观。在设计时最好为这种偶然事
件做好准备。要使应用程序可以使用非标准字体,使用WindowsAPI函数的AddFontResource和
DeleteFontResource。并将非标准字体的.FOT文件与应用程序一起发布。


三、Windows版本
  当使用WindowsAPI功能或通过应用程序访问Windows操作系统的区域时,可能在Windows的
版本不同的各个计算机上有些函数、操作或区域不可用。例如,服务仅对WindowsNT操作系统
适用。如果应用程序是作为一种服务或与服务有关时,应用程序安装在Windows95下将会失败。

对这种可能性,可有一些选择:

· 在应用程序的系统要求中指定应用程序可运行的Windows版本。只在兼容的Windows版本下
安装并使用应用程序是用户的责任。

· 当应用程序安装时检查Windows的版本。若遇到不兼容的Windows的版本,或者暂停安装进
程或至少向用户提出警告。

· 在运行时,就在执行一个不是对所有的版本都适用的操作前检查Windows版本。如果是一
个不兼容的Windows版本,则放弃进程并警告用户。或者,根据Windows的不同版本提供不同的
代码。有些操作在WindowsNT在Windows95的执行是不同的。使用WindowsAPI函数GetVersion
Ex来确定Windows的版本。

posted on 2014-09-17 00:46  云之灵  阅读(205)  评论(0编辑  收藏  举报