不同DPI下窗体的自适应的有关注意点(转自:http://hi.baidu.com/superkinger/blog/item/79e047ec6c80563526979197.html)

1.        在设计窗体的时候需要考虑是否允许程序在不同DPI自适应窗体,不自适应的优点是在不同的DPI下看到的结果基本是一样的,缺点是可能在不同的DPI下看起来太小或者太大。

2.        如果不想自适应窗体,则设置窗体的Scaled为False

3.        如果需要自适应窗体,则设置窗体的Scaled为True(Delphi的窗体默认是允许Scaled的)

4.        将AutoScroll属性设置为False并保存窗体,AutoScroll为True表示不在运行期改变窗体的大小,这样当窗体的字体和组件进行缩放时看起来就会很糟糕。(在Delphi 7下,如果窗体可以调整大小,则AutoScroll会自动设定为True,而我们大部分的程序都是可以改变窗体大小的,Delphi默认的窗体也是可以改变窗体大小的,所以很多时候窗体就被不小心设置为Scaled和AutoScroll都是True了)

5.        将窗体的自己设置为可以自适应的TrueType字体,如Arial,Tahoma等;MS San Serif不是TrueType的,虽然大部分情况下看起来还行。(Delphi 2006调整了窗体的默认字体为Tahoma,可是之前版本的Delphi的窗体的默认字体都是MS San Serif,这个字体也是在Windows 2000等系统下看起来正常的中文字体到了Win98下却很小很丑的元凶)

6.        如果使用的字体在运行的操作系统中没有,则Windows会自动在缺失字体的同一体系中选择一种替换字体,不过替换字体的大小与原来设定的字体很可能不同,这样也可能会导致问题。(可以通过向%WinDir%\Fonts添加字体,也可以通过系统消息向系统注册字体)

7.        将窗体的Position属性设置为除poDesigned之外的值(Delphi 2006中的poDefaultPosOnly也不可以),因为如果设计的时候窗体被拉到Left为650的地方,那么窗体在640*480的分辨率下就会看不到了。

8.        不要将窗体上的各个控件挤在一起,起码要给各个控件之间留4个像素的位置,这样当Border属性等导致控件变化的时候不会导致控件重叠在一起。

9.        给单行的Align属性不是alCenter的Label设置AutoSize为True。(多行的Label不要设置AutoSize为True)

10.     给Label/CheckBox等等控件足够的空白范围以便当字体宽度变化时变化。预留当前长度的25%是比较好的(如果要进行多语翻译则需要更多留白,至少30%)。如果Label的AutoSize为False,则要Label的Width就要足够大。对于多行的Label,在Label的底部起码多留一行的空间。

11.     不要在不同的DPI下在IDE中打开并保存窗体(和包含窗体的代码文件)。(对于SCM,推荐使用小字体-96DPI,Windows经典主题)

12.     无论是在运行期还是在设计期都不要多次ReScale窗体,因为每次Scale都会带来浮点精度的舍去;也不要修改一个窗体的PixelsPerInch属性(IDE会阻止该属性的修改,但是却不能阻止手工修改),此外也不要直接修改dfm中的窗体大小等等信息,TextHeight属性也不能修改。

13.     设计窗体的时候要考虑窗体的大小不要超过程序能运行的最小分辨率。

14.     设计窗体时,要合理设置控件的Anchors/Align等属性。

15.     此外如TComboBox/TDBLookupCombo等等组件也需要尽量给足宽度,否则可能会看不到完整的信息。

16.     在程序中不要使用固定的控件位置和大小,因为这些都可能在运行时变化。(如Button.Top := 50等)

17.     设置了AutoResize的TImage的图片不会自动放大或缩小,所以不可以采用利用设计期的图片的大小来只显示部分图像的方法。

18.     如果窗体可以记忆上一次运行的大小、位置、WindowsState等,在Load的时候需要注意要确保窗体在屏幕上可见,以及不要调整不能调整大小的窗体的大小。

19.     TFrame是为了在设计期复用窗体而引入的,如果要将运行期的窗体嵌入到别的窗体,则需要使用TForm。(DBStudio就不恰当的使用了TFrame)

20.     在多语程序中可能会涉及到字体的修改,这时也应该考虑多DPI设定的情况。

21.     如果一个电脑在多DPI间切换,则注册表保存的窗体大小和位置等信息也需要被小心处理。

转载于:https://www.cnblogs.com/mumble/archive/2010/05/11/1732935.html

不同DPI下窗体的自适应的有关注意点(转)相关推荐

  1. 不同分辨率不同DPI下的自适应

    不同分辨率不同DPI下的自适应 WPF应用程序在不同分辨率下要做到自适应需要一般可以在前台使用ViewBox作为最外层容器,里面使用一个固定尺寸的容器.在后台需要动态设置窗体的尺寸,宽度和高度设置我这 ...

  2. 解决VS在高DPI下设计出的Winform程序界面变形问题

    解决VS在高DPI下设计出的Winform程序界面变形问题 参考文章: (1)解决VS在高DPI下设计出的Winform程序界面变形问题 (2)https://www.cnblogs.com/BenP ...

  3. 【Android 屏幕适配】屏幕适配基础概念 ② ( 像素 px 与 密度无关像素 dip | 像素 px 与 密度无关像素 dip 在不同屏幕像素密度 dpi 下的换算关系 )

    文章目录 一.像素 px 与 密度无关像素 dip 二.像素 px 与 密度无关像素 dip 在不同屏幕像素密度 dpi 下的换算关系 参考文档 : 设备兼容性概览 屏幕兼容性概览 支持不同的像素密度 ...

  4. 跨域下的iframe自适应高度

    采用JavaScript来控制iframe元素的高度是iframe高度自适应的关键,同时由于JavaScript对不同域名下权限的控制,引发出同域.跨域两种情况. 由于客户端js使用浏览器的同源安全策 ...

  5. CSS深入理解流体特性和BFC特性下多栏自适应布局

    一.块状元素的流体特性与自适应布局 块状元素像放在容器中的水流一样,内容区域会随着margin, padding, border的出现自动填满剩余空间,这就是块状元素的流体特性. 来一个小实验: di ...

  6. ElementUI el-table 在flex下的宽度自适应问题

    BUG:在flex容器下面的一个flex:1的子容器里面写了个el-table用来展示列表数据,在做宽度自适应测试的时候发现该组件的宽度只会增加不会缩小. Debug:通过控制台发现组件生成的tabl ...

  7. vb 6 MDI窗体图片自适应源码

    vb 6.0制作的图片可以自适应的MDI窗体,最终完成的效果如截图所示,像不像一个比较专业的信息管理系统的界面效果?不过本实例主要是演示MDI窗体的制作方法,图片如何跟随窗口大小的变化而自动变化,打开 ...

  8. 【转】WPF自定义控件与样式(13)-自定义窗体Window 自适应内容大小消息框MessageBox...

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要内容: 自定义Window窗体样式: 基于自定义窗体实现自定义MessageB ...

  9. echarts自适应大小或改变窗体大小自适应大小与浏览器最大最小化事件

    窗体最大化最小化事件 $(window).resize(function () {autoWidth();}); echarts图表自适应的有两种办法 一种是重新加载一遍数据重新赋值 另一种是调用re ...

最新文章

  1. ECEF rectangular coordinate system(ECEF直角坐标系)
  2. 第五章(5)Libgdx应用框架之线程
  3. 第 5 章 第二个 activity
  4. python日志汇总
  5. Redis基础高级学习笔记
  6. 10分钟让你学会使用Vuex
  7. ASP.NET Core 2.0和Angular 4:从头开始构建用于车辆管理的Web应用程序
  8. 十八、x86汇编基础
  9. python点击屏幕_python实现鼠标自动点击屏幕
  10. 威金病毒(感染EXE文件)专杀工具
  11. wps改页码真的是太简单了
  12. Android 游戏 - 聚合SDK
  13. Jira+Confluence+Fisheye+Crucible安装步骤清单
  14. javaScript实现通过鼠标滑轮改变元素大小
  15. mysql——关于找不到vrcuntime140.dll与vrcuntime140_1.dll的问题
  16. Android 音频可视化 Visualizer
  17. ubuntu下启动wifi
  18. 面试题:Lucene、Solr、ElasticSearch
  19. SemEval 情感分析主流数据集以及任务介绍
  20. 几个简单的数据点平滑处理算法

热门文章

  1. React开发(173):ant design设置额外的展开行
  2. [css] 简述你对BFC规范的理解
  3. 工作332:uni-uview上传获取到对应数据
  4. [css] 用css实现一个等腰三角形的小图标
  5. [vue-element]ElementUI的穿梭组件如果数据量大会变卡怎么解决不卡的问题呢?
  6. 工作289:父子组件传值控制弹窗关闭
  7. 工作114:传参控制
  8. “约见”面试官系列之常见面试题第二十八篇之vue中的混合(minix)实例理解
  9. 前端学习(1598):ref转发
  10. 前端学习(812):dom导读