经常遇到这样的情况,在我们使用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属性上。(目前至少TEditTLabel都是这样的,要注意它们的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等组件手动拖拽固定大小,但是编译之后显示有差别的情况的更多相关文章

  1. VMware Workstation 15 Pro安装带图形化界面的CentOS7

    1.双击打开“VMware Workstation”,然后选择“创建新的虚拟机” 2.在安装向导中,选择“稍后安装操作系统”,然后点击“下一步”继续安装 3.在“客户机操作系统”中选择“Linux(L ...

  2. 2018.12.2 Mac环境下mysql图形化界面的Navicat premium 12 中文版安装与激活

    软件链接: https://pan.baidu.com/s/1ZUNLQ1DW9rQZUzDXQn2rWQ 提取码: 8i78 复制这段内容后打开百度网盘手机App,操作更方便哦 注意最新版 12.0 ...

  3. Linux环境下使用图形化界面的SVN客户端软件-RabbitVCS

    如果想在Linux环境下使用图形化界面的SVN客户端软件,那么RabbitVCS绝对是首选,可以媲美Windows环境下用的TortoiseSVN,甚至连操作都基本一样,所以强烈推荐给各位童鞋. Ra ...

  4. [未完成]关于GUI Java图形化界

    "笔记内容完成,整体未完成" GUI 图形化用户界面 用java做图形化用户界面的程序不多,大多用C++和defy.因为,Java做图形化效率低. 首先你要安装一个虚拟机,C++是 ...

  5. 用delphi制作无界面的activex控件

    首先,您要了解: •COM的基本原理 •能被网页调用的非可视ActiveX控件必须是一种至少实现了IOleObject接口的TAutoObject组件 •利用Delphi向导生成的ActiveX控件必 ...

  6. 轻量级Web API实现,带接口界面的Jayrock JsonRPC接口组件升级版

    升级功能如下: 1.增加模块名称.输入参数.输出参数注释 2.增加Sign验证.输入数据解密.输出数据解密重写方法 3.增加集成Demo规范 4.增加模块分类.接口快速定位.接口调用说明.接口输入输出 ...

  7. linux服务器通过X11实现图形化界面显示

    1 背景描述 有些LINUX服务器出于性能和效率的考虑,通常都是没有安装图形化界面的,那么图形化程序在服务器上压根儿就跑不起来,或者无法直接显示出来,这就很尴尬了!那么如何解决这个问题呢?可以基于X1 ...

  8. xming + putty 搭建远程图形化ssh访问ubuntu 14.04

    putty下载: http://www.putty.org/ 一般我们远程登录linux 服务器,都是使用非加密的 telnet 或者加密的 ssh.这些登录方式有一个特点:只能登录字符界面,不能运行 ...

  9. 【转帖】远程显示(操作) 服务器 GUI 程序(图形化界面) (基于 X11 Forwarding + Centos + MobaXterm)

    远程显示(操作) 服务器 GUI 程序(图形化界面) (基于 X11 Forwarding + Centos + MobaXterm) https://zhuanlan.zhihu.com/p/310 ...

随机推荐

  1. 【poj2449】 Remmarguts' Date

    http://poj.org/problem?id=2449 (题目链接) 题意 求有向图K短路. Solution A*.g(x)为当前节点到起点的步数,h(x)为当前节点到终点的最短距离(也就是估 ...

  2. BZOJ3209 花神的数论题

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  3. python3随记——字符编码

    1.1什么是字节 字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符. 比特(bit)在计算机中最小的单位,在二进制位的电脑的系统中,每一b ...

  4. 网络基础知识之 Ping

    ========================================假定主机A的IP地址是192.168.1.1,主机B的IP地址是192.168.1.2,都在同一子网内,则当你在主机A上 ...

  5. asp.net core 使用EF7 Code First 创建数据库,同时使用命令创建数据库

    1.首先下载vs2015的Asp.Net Core(RC2)的插件工具(https://www.microsoft.com/net/core#windows)2.创建一个asp.net Core的项目 ...

  6. Shell case esac语句

    case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构. case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: ...

  7. linux命令grep及正则表达式

  8. CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(1)设定背景图

    技术的新发展,除计算机可以接入互联网之外,平板电脑.智能手机.智能电视等其他设备均可访问互联网.在多设备时代,构建多屏体验也不是听说的那么难. 但是这也增加了学习CSS的难度?不知道如何上手,只懂一点 ...

  9. Windows 7安装解压版MySQL 5.6(不包含配置文件优化)

    到官网下载MySQL5.6 下载地址:http://dev.mysql.com/downloads/mysql/5.6.html, 提供了 .exe版本 和 .zip解压版,因为我的操作系统是64位的 ...

  10. Asp.Net Core--基于角色的授权

    翻译如下: 当创建身份时,它可以属于一个或多个角色,例如Tracy可以属于管理员和用户角色,而Scott可以仅属于用户角色. 如何创建和管理这些角色取决于授权过程的后备存储. 角色通过ClaimsPr ...