解决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 ...
随机推荐
- Android Gradle 完整指南(转)
本文转载来自:http://www.jianshu.com/p/9df3c3b6067a 为什么需要学Gradle? Gradle 是 Android 现在主流的编译工具,虽然在Gradle 出现之前 ...
- bzoj4498: 魔法的碰撞
首先,如果排列确定,那么就可以组合学解决了,不过排列数很多,显然不能枚举. 我们发现如果区间不能重叠的话,总长度减去所有区间长度就是能用的多余格子数. 然而相邻区间可以重叠较小区间一半的长度,因此这些 ...
- Leetcode 254. Factor Combinations
Numbers can be regarded as product of its factors. For example, 8 = 2 x 2 x 2; = 2 x 4. Write a func ...
- HttpClient 4.3 使用
httpclient的api变化很快,本篇随笔记录自己使用4.3.6版本时所做的设置.版本虽然不是最新,但达到了目的就行. maven依赖: <dependency> <groupI ...
- django创建blog
如果本文看不懂的,去看的我视频吧!http://www.testpub.cn/ ------------------------------------------- Django 自称是" ...
- UVa 11987 Almost Union-Find(支持删除操作的并查集)
传送门 Description I hope you know the beautiful Union-Find structure. In this problem, you’re to imple ...
- Hibernate的session缓存和对象的四种状态
一.session缓存 说session缓存就得说到JAVA对象的生命周期,当没有任何引用指向一个对象时,对象则可以被gc回收,也就是生命周期结束了 而hibernate获取一个对象后,会将对象存入s ...
- 通过grep来进行日志分析,grep -C和配合awk实际对catalina.out使用案例
本文介绍通过grep来进行日志分析,主要介绍grep -C和配合awk实际对catalina.out使用案例 grep可以对日志文件进行筛选,统计,查询,快速定位bug. 首先,你的日志需要比较规范, ...
- Kafka实战-Flume到Kafka
1.概述 前面给大家介绍了整个Kafka项目的开发流程,今天给大家分享Kafka如何获取数据源,即Kafka生产数据.下面是今天要分享的目录: 数据来源 Flume到Kafka 数据源加载 预览 下面 ...
- Python之路【第二十篇】其他WEB框架
WEB框架功能分析 WEB框架本质上,就是一个SOCKET Server WEB框架前面有WSGI或者是自己写的SOCKET,然后交给URL路由系统处理,然后交给某个函数或某个类,然后在模板里拿到模板 ...