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

不同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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++深度剖析教程30】C++中抽象类和接口

加qq1126137994 微信:liu1126137994 1、面向对象中的抽象概念; 在现实中,需要知道具体的图形类型才能知道如何求面积,但是对于抽象的‘图形’,我们是没法求其面积的,而且对其求面积也是没有意义的: cl…

有效沟通力思维导图

有效沟通,适用于生活和工作中,甚至是孩子教育上面,分享一下;

[转]Microsoft Solution Framework 微软解决方案框架结构

本文转自:http://baike.baidu.com/view/1291436.htmMSF(Microsoft Solution Framework)微软解决方案框架结构是一组建立、开发和实现分布式企业系统应用的工作模型、开发准则和应用指南。它帮助企业融合商业和技术的目标,降低采用…

指针的大小与什么有关

指针的大小与什么有关? cpu位数(32位数4字节,64位数8字节)操作系统位数(32位数4字节,64位数8字节)编译器的位数(32位数4字节,64位数8字节) 当上述3种位数不…

数据结构思维导图

学习是一个不断渐进的过程,最近整理了一下数据结构思维导图,分享一下,后续更新中 总结:算法实际上属于,数据建模,首先是问题的抽象,采用数学公式来表示(数据建模:将问题…

(转)代理模式(Proxy)

原文地址:http://www.cnblogs.com/QinBaoBei/archive/2010/05/18/1737866.html 为了深刻点理解代理模式,我们先来看一个 Demo , 首先这个 Demo 是用来测试 QQ 号码是否在线, 这里涉及到的内容是 Web 服务的使用, 这个 …

【C++深度剖析教程31】被遗弃的多重继承

加qq1126137994 微信:liu1126137994 C中是否允许一个类继承多个父类? C支持编写多重继承的代码: 一个子类可以拥有多个父类子类拥有所有父类的成员变量子类继承父类所有的成员函数子类对象可以当做任意父类对象使用 多重继承的语法规则&a…

zookeeper思维导图

之前用word文档记笔记,但是没有思维导图清晰,又整理了一下,分享一下;

管理软件本质论

我们上管理软件到底是为了什么?1 为员工提供自动化工具,可以让他们节省出更多的时间可以做更多的工作?2 可以通过管理软件的互联网联网特性或局域网联网特性,让部门和部门之间、总部和分公司之间按业务流程通常运营?2 …

【C++深度剖析教程32】new/malloc区别 delete/free区别

加qq1126137994 微信:liu1126137994 一起学习更多技术!!! 1、new与malloc的区别: new是关键字,它是C语言的一部分,而malloc是由C库提供的函数new分配的内存的单位是具体的类型大小&#xff0c…

redis 思维导图

之前整理的redis 思维导图,分享一下,后续持续更新;

软件汉化教程

看到网上经常有人问汉化方面的东西,我今天也来灌水一篇,来个汉化扫盲教程。写的不好的地方欢迎大家指正!OK,现在我们进入正题。我这里所说的汉化,是指汉化 Windows 下的 PE 文件,把其他语言界面的程序翻译为…

图的DFS深度遍历

最近复习了一下图的内容,记录一下,后续添加详解(无向图的深度遍历) package com.qey.learn;import java.util.ArrayList; import java.util.Arrays;/*** ClassName graph* Description* Author qianxl* Date 2021-03-06 17:18* V…

【C++深度剖析教程33】C++中的构造函数与析构函数是否可以为虚函数

加qq1126137994 微信:liu1126137994 一起学习更多技术!!! 问题一:构造函数与析构函数可以成为虚函数么? 答案: 1、构造函数不可以成为虚函数 因为在构造函数执行结束后,虚函数表…

网站切图初学

先做一个简单的说明为什么选择Photoshop软件而没有选择Firework软件。Friework Dreamweaver Flash号称网页制作三剑客,Friework与Dreamwaver整合得更为紧密,在这里只所以选择photoshop只是因为我的偏好,况且我对 firework软件使用的次数很少&…

【C++深度剖析教程34】C++中的强制类型转换dynamic_cast

加qq1126137994 微信:liu1126137994 一起学习更多技术!!! C中的继承中,如何使用强制类型转换? 知识点: dynamic_cast是与继承相关的类型转换关键字dynamic_cast要求相关的类中必须有虚函数dy…

main函数的参数的含义

转载自:点击链接 链接2 加qq1126137994 微信:liu1126137994 一起学习更多技术!!! 最近学习服务器网络编程,遇到了一个问题,main函数的参数,特意整理资料记录之!&#…

C#FTP操作

C# FTP操作类 收藏 using System;using System.Collections;using System.IO;using System.Net;using System.Net.Sockets;using System.Text;using System.Text.RegularExpressions; namespace Discuz.Common{ /// <summary> /// FTP类 /// </summary> …

【C++深度剖析教程35】函数模板的概念和意义

加qq1126137994 微信&#xff1a;liu1126137994 一起学习更多技术&#xff01;&#xff01;&#xff01; 1、问题引入&#xff1a; C中有几种变量交换的方法&#xff1f; 定义宏代码块和定义函数 #include <iostream> #include <string>using namespace std;#d…