解决Delphi图形化界面的TEdit、TLable等组件手动拖拽固定大小,但是编译之后显示有差别的情况
经常遇到这样的情况,在我们使用Delphi的可视化工具进行UI设计的时候,我们拖拽TEdit或者Label组件,并且在可视化界面上设置它们的长、宽
但是当我们编译和运行程序的时候,却发现真正显示出来的 TEdit或者TLabel组件并不是我们在可视化界面所拖拽的长和宽(显示的“有问题”)
具体的情况见下面的两张图
1.我们在Delphi的可视化界面上需要一个TEdit和TLabel组件,于是我们拖拽了两个组件放在上面,并且设置拖拽设置了长和宽(为了显示清楚,我设置了颜色)

这个时候通过拖拽设计界面上的组件确实
2.但是按 F9 运行的时候显示的却是这样的效果

明显图中显示的 TEdit、TLabel组件(两个黄色区域)根本就不是设置的时候的样子
2015.08.07发现了本质原因
上面出现的这个问题,我在2015.05.11专门写了博客说明解决方法(见本博客的下部分),那个方法确实可以解决问题,但是没有弄明白真正的原因,所以现在进行说明。
在可视化界面上通过拖拽设计TEdit或者TLabel的大小的时候,拖拽好了一个长和宽,但是在点击编译运行之后,发现出来的效果是不一样的(入上面的两张图)。
主要的问题就是出在TEdit的AutoSize属性(TLabel也有AutoSize属性),因为通过看该TEdit的Object Inspector配置面板,发现AutoSize为True,所以在Object Inspector配置面板上将AutoSize属性设置为False,然后再编译运行就可以看到实际的长和宽就是自己在设计时候拖拽出来的长和宽。
并不需要在窗体创建方法中声明。而且看下面的在窗体界面中来声明的解决方法其实还是将AutoSize设置为False,如果不讲AutoSize设置为False,而是直接显式声明TEdit的长和宽,编译后运行的效果还是有问题的,所以根本点在AutoSize属性上。(目前至少TEdit与TLabel都是这样的,要注意它们的AutoSize属性)
在此问题上可以引申出Object Inspector配置界面的作用
要想程序在编译运行之后有想要的刚启动时候的视觉效果,可以在对应组件的Object Inspector配置界面配置,也可以在窗口创建方法中显式声明,如果两者有冲突,那么窗体创建方法中的相关设置将覆盖组件在Object Inspector里面的配置。
关于组件配置的优先级,比如一个TEdit组件的大小(该控件放在一个窗体上)的配置,在Object Inspector里面进行了相关配置,在窗体创建方法中也有显式的声明,另外还有一个按钮,按钮点击方法中也有关于该TEdit的大小的改变的代码,那么在程序运行的时候,在刚启动程序的时候,首先是窗体创建方法中的配置会覆盖在Object Inspector里面的配置,如果点击了按钮,那么就会执行按钮的点击函数,此时会覆盖其在窗体创建方法中的相关设置。
不过还是建议在组件的Object Inspector配置界面里面配置相关的初始化的配置,这样就避免了在窗体创建方法中写太多的代码。
另外在研究源码的时候,尤其是研究涉及到控件的代码的时候,不要只是看代码,不要忘记了在组件的Object Inspector里面可能还有一些重要的配置信息。
2015.05.11
这个时候我们可以参考下面的具体事例解决:
当然这只是其中的一种方法,绝对还有其他的方法,而且我也不知道下面所讲的这种方法是不是很好的,所以还待补充
1.我们在Delphi的可视化界面上需要一个TEdit和TLabel组件,于是我们拖拽了两个组件放在上面,并且设置拖拽设置了长和宽(为了显示清楚,我设置了颜色)

这个时候通过拖拽设计界面上的组件确实
2.但是按 F9 运行的时候显示的却是这样的效果

明显图中显示的 TEdit、TLabel组件(两个黄色区域)根本就不是设置的时候的样子
3.所以需要进行一些设置,在窗体创建的时候去显示的设置这两个组件的大小即可
3.1.将鼠标点击到窗体上,再在Object Inspector的Events中双击窗体的OnCreate方法

3.2.然后跳回到代码编辑部分,开始编辑TForm的创建代码,并在这里面显式的设置那两个组件的大小
procedure TForm1.FormCreate(Sender: TObject);
begin
edt1.AutoSize:=False;
edt1.Height:=241;
edt1.Width:=321; lbl1.AutoSize:=False;
lbl1.Height:=241;
lbl1.Width:=321;
end;
特别注意,在设置对应组件的大小之前,一定要首先声明,比如:
edt1.AutoSize:= False;
lbl1.AutoSize:= False;
不过像TListBox等一些组件并不需要再设置长和宽之间设置其AutoSize(像TListBox就没有 AutoSize属性)
这样才能保证显示的效果是想要的
4.然后在运行就可以显示想要的效果

解决Delphi图形化界面的TEdit、TLable等组件手动拖拽固定大小,但是编译之后显示有差别的情况的更多相关文章
- VMware Workstation 15 Pro安装带图形化界面的CentOS7
1.双击打开“VMware Workstation”,然后选择“创建新的虚拟机” 2.在安装向导中,选择“稍后安装操作系统”,然后点击“下一步”继续安装 3.在“客户机操作系统”中选择“Linux(L ...
- 2018.12.2 Mac环境下mysql图形化界面的Navicat premium 12 中文版安装与激活
软件链接: https://pan.baidu.com/s/1ZUNLQ1DW9rQZUzDXQn2rWQ 提取码: 8i78 复制这段内容后打开百度网盘手机App,操作更方便哦 注意最新版 12.0 ...
- Linux环境下使用图形化界面的SVN客户端软件-RabbitVCS
如果想在Linux环境下使用图形化界面的SVN客户端软件,那么RabbitVCS绝对是首选,可以媲美Windows环境下用的TortoiseSVN,甚至连操作都基本一样,所以强烈推荐给各位童鞋. Ra ...
- [未完成]关于GUI Java图形化界
"笔记内容完成,整体未完成" GUI 图形化用户界面 用java做图形化用户界面的程序不多,大多用C++和defy.因为,Java做图形化效率低. 首先你要安装一个虚拟机,C++是 ...
- 用delphi制作无界面的activex控件
首先,您要了解: •COM的基本原理 •能被网页调用的非可视ActiveX控件必须是一种至少实现了IOleObject接口的TAutoObject组件 •利用Delphi向导生成的ActiveX控件必 ...
- 轻量级Web API实现,带接口界面的Jayrock JsonRPC接口组件升级版
升级功能如下: 1.增加模块名称.输入参数.输出参数注释 2.增加Sign验证.输入数据解密.输出数据解密重写方法 3.增加集成Demo规范 4.增加模块分类.接口快速定位.接口调用说明.接口输入输出 ...
- linux服务器通过X11实现图形化界面显示
1 背景描述 有些LINUX服务器出于性能和效率的考虑,通常都是没有安装图形化界面的,那么图形化程序在服务器上压根儿就跑不起来,或者无法直接显示出来,这就很尴尬了!那么如何解决这个问题呢?可以基于X1 ...
- xming + putty 搭建远程图形化ssh访问ubuntu 14.04
putty下载: http://www.putty.org/ 一般我们远程登录linux 服务器,都是使用非加密的 telnet 或者加密的 ssh.这些登录方式有一个特点:只能登录字符界面,不能运行 ...
- 【转帖】远程显示(操作) 服务器 GUI 程序(图形化界面) (基于 X11 Forwarding + Centos + MobaXterm)
远程显示(操作) 服务器 GUI 程序(图形化界面) (基于 X11 Forwarding + Centos + MobaXterm) https://zhuanlan.zhihu.com/p/310 ...
随机推荐
- Django-跨站请求
//用户验证Tonken 在Html 中 设置一个Token {% csrf_token %} //在代码Views.py 中返回值添加 context_instance=RequestContext ...
- 还原数据库:The backup set holds a backup of a database other than the existing database……
还原数据库时报以上错误,解决办法是: 1.删除新建的DB 2.直接右键Databases-->Restore Database 3.在弹出窗口中的To database栏位填写需要新建的DB名称 ...
- the pipeline of call SNP
######################################## ############### Mapping ################ ################## ...
- mysql习惯及主从复制参数设置
mysql 重复数据插入 replace into t(id, update_time) values(1, now()); 或 replace into t(id, update_time) sel ...
- 聊聊HTTPS和SSL/TLS协议
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...
- [转]eclipse快捷键
Ctrl+1 快速修复Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当前行和下面一行交互位置(特别实用 ...
- druid数据库密码加密程序编写
第一步:引入 druid-1.0.1.jar 架包 第二步: 编写程序 package nihao; import com.alibaba.druid.filter.config.ConfigTool ...
- Root--超级用户
http://www.shuame.com/root/ root (计算机术语言) ROOT存在于Linux系统.UNIX系统(如AIX.BSD等)和类UNIX系统(如稳定到服务器都在用的Debia ...
- Web jquery表格组件 JQGrid 的使用 - 11.问题研究
系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...
- Java排序算法——拓扑排序
package graph; import java.util.LinkedList; import java.util.Queue; import thinkinjava.net.mindview. ...