经常遇到这样的情况,在我们使用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. angularJs模块ui-router之路由控制

    在你的应用中大多数状态都有与其相关联的 url,路由控制不是设计完成 state 之后的事后想法,而是开始开发时就应该考虑的问题. 这里是如何设置一个基本url. $stateProvider .st ...

  2. delphi 取cpu号

    从网上找的取cpu号 在d7中测试通过了 push,move,pop ...有点难 现在的水平我也就只能拿来主义了 /// <summary>/// 取cpu号/// </summa ...

  3. Python删除指定时间的文件

    import os import time import sys from xml.dom import minidom, Node from xml.dom.minidom import parse ...

  4. bzoj2194: 快速傅立叶之二

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  5. Windows 新装进阶操作指南

    Windows禁用CTRL+Space切换输入法 注册表打开HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys\00000010 把Key Mo ...

  6. RAM、DRAM、SD卡

    catalogue . ROM.RAM.DRAM.SRAM和FLASH的区别 . 内存工作原理 . DRAM基本结构与原理 . SD卡基本结构与原理 1. ROM.RAM.DRAM.SRAM和FLAS ...

  7. PHP处理海量样本相似度聚类算法

    catalogue . TF-IDF . 基于空间向量的余弦算法 . 最长公共子序列 . 最小编辑距离算法 . similar_text . local sensitive hash 局部非敏感哈希 ...

  8. Zabbix监控php-fpm status

    开启php-fpm status php-fpm.conf pm.status_path = /statusx45 nginx.conf location ~ /(statusx45)$ { incl ...

  9. C++11的enum class & enum struct和enum

    C++11的enum class & enum struct和enum C++标准文档--n2347(学习笔记) 链接:http://www.open-std.org/jtc1/sc22/wg ...

  10. Nginx 301重定向设置

    server { server_name www.***.com ***.com; if ($host != 'www.***.com' ) { rewrite ^/(.*)$ http://www. ...