Component和Control区别

本文详细阐述了Delphi中Component和Control的概念及其区别,解释了Owner与Parent属性的作用及意义,介绍了如何通过这些属性控制组件的生命周期和布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过实践发现:

Component包含不可见的组件(就是找不到visible属性的组件,例如:ADOQUERY、POPUPMENU等),

Control不包含


以下内容为转载:     

       很多时候会将一个Panel1放在Form1上,然后再将一个Button1放在Panel1上,这样的话,这个Button1的Owner就是Form1而Parent则是Panel1。



        所有的Delphi的Component都有Owner 属性,Owner属性表示这个Component的所有者是谁,比如上面的例子,Button1的所有者(Owner )就是Form1,当Form1析构时,会先将Button1释放掉。也就是说,Owner会自动地控制Component的生命周期,它负责构件的创建和释放。如在上例中,系统默认Form上所有Component的所有者是Form1。顺便指出,Create方法应带有表示Component的Owner的参数.,如果Owner设置的为Nil值,那这个Component必须创建者编码析构它,Owner属性是只读的,并且在运行期是无法修改它的值。


         类似,但不同于Owner属性,Parent 属性则表示Component从属于另一个Component,简单的说自身是其他Component的Child Component,例如 TForm,TGroupBox ,TPanel等。Parent是用来控制 在它的客户区范围内的Child Component,Parent决定如何展示包含的Child Component,例如:Left,Top等属性都是相对于Parent的位置。


         Parent属性可以在运行期被修改。并非所有的Component都有Parent,Parent属性可以为Nil值,可以用HasParent 方法返回的Boolean值来判断Component是否拥有Parent。 我们可以设置Parent属性来做一些控制,例如:我们可以在Form1上置Panel1和Panel2,然后再放一个Button1在Panel1上,在Button1的OnClick事件中写上:Button1.Parent := Panel2;  运行这段代码你会发现,开始Button1是在Panel1上,然后按下Button1触发OnClick事件后,Button1‘跳’到了Panel2上。我们要在运行期间创建一个Button的话,就一定要注意指定它的Parent属性,否则Button不会显示出来,因为它必须拥有一个Parent的容器来显示自己。如果你在设计这个Button时察看下属性编辑器,你会看到ParentFont和ParentShowHint等属性,类似于这样的属性设置为True的话,就会使Button的Font以及ShowHint属性按Parent的Font和ShowHint的值来设置,保持一致的风格。比如Parent的Font是红色,那么Button的字体也将是红色。


        ControlCount和ComponentCount的区别也就取决于Parent与Owner的区别,还是拿上面的例子解释下Panel1的ControlCount为1而ComponentCount却为0,是因为Button1的Parent属性指向的是Panel1而Owner属性则还是Form1,所以Form1的ComponentCount值才是1。我们可以利用Controls属性与Components属性去遍历Parent所包含的Child Component和Owner所管理的Child Component。
<think>嗯,用户的问题是关于在Component config中找到或添加LCD外设控制的设置,但遇到了找不到的情况。首先,我需要回想一下相关的嵌入式系统配置流程,特别是在使用类似Kconfig的配置界面时的步骤。根据用户提供的引用,比如引用[1]提到双击Components窗体下的组件,可能涉及图形化配置工具,比如某些IDE中的硬件配置工具。 用户可能使用的是类似Xilinx的Vivado或Petalinux这样的工具,因为引用[3]提到了PYNQAXI GPIO的配置,这可能与Xilinx平台相关。在Petalinux项目中,外设配置通常通过Component config进行。所以首先,我需要确认用户是否在正确的菜单层级下查找。有时候LCD配置可能被归类在子菜单中,比如Peripheral Drivers或Display Support下。 另外,引用[2]提到RC的不同实现,虽然主要关于PCIe,但也说明不同处理器的配置结构可能有差异,因此需要确认用户的具体硬件平台,比如是否是Xilinx Zynq系列,或者其他处理器。不同的处理器,LCD外设的位置可能不同。 接下来,检查是否启用了相应的驱动支持。例如,在Linux内核配置中,LCD通常需要Frame Buffer或DRM驱动的支持。用户可能需要先启用这些顶层选项,才能看到LCD外设的具体配置。如果这些选项未启用,相关子选项可能不会显示。 如果确认路径正确但依然找不到,可能需要检查设备树配置是否正确,因为外设的控制有时依赖于设备树的设置。引用[3]中的AXI GPIO例子说明,硬件设计中的IP核需要正确连接并在设备树中描述,因此LCD可能也需要类似的步骤,比如在硬件设计中添加LCD控制器IP,并在设备树中启用相应节点。 此外,用户可能需要安装额外的软件包或驱动模块,特别是在使用预构建的系统时,某些驱动可能默认未包含。例如,在Petalinux中,可能需要通过菜单配置启用特定的LCD驱动。 最后,建议用户查阅硬件文档,因为不同厂商的LCD配置步骤可能不同。如果问题依然存在,可能需要检查是否有硬件设计错误,比如LCD控制器未正确连接到处理器,或者引脚分配有误。</think>在嵌入式系统开发中配置LCD外设需要从硬件设计、驱动启用设备树配置三个层面进行,以下是具体步骤指引: ### 一、硬件设计验证 1. **确认IP核集成** 在Vivado/Vitis设计中需先添加LCD控制器IP核(如AXI LCD Controller),并按文档要求完成引脚约束。引用[3]提到的AXI GPIO配置方法可参考: ```tcl create_bd_cell -type ip -vlnv xilinx.com:ip:axi_gpio:2.0 axi_lcd_ctrl apply_bd_automation -rule xilinx.com:bd_rule:axi4 -config {Master "/processing_system7_0/M_AXI_GP0" intc_ip "/ps7_0_axi_periph" Clk_xbar "Auto" Clk_master "Auto" Clk_slave "Auto" } [get_bd_intf_pins axi_lcd_ctrl/S_AXI] ``` 完成后需生成比特流并导出硬件描述文件(XSA) ### 二、软件层配置流程 2. **内核驱动启用** 在Petalinux/Yocto工程的`Component Config`菜单中,按以下路径操作: ``` Device Drivers → Graphics support → Frame buffer Devices → <*> Support for frame buffer devices → Console display driver support → <*> Framebuffer Console Support → <*> LCD panel support ``` 部分平台需额外启用`DRM (Direct Rendering Manager)`驱动 3. **设备树节点添加** 在`system-user.dtsi`中增加LCD控制器节点配置,以Xilinx Zynq为例: ```dts &axi_lcd_ctrl_0 { compatible = "xlnx,axi-lcd-1.00.a"; reg = <0x43C00000 0x10000>; xlnx,panel = "hannstar,hsd070pww1"; clocks = <&clkc 15>; status = "okay"; }; ``` ### 三、典型问题排查 | 现象 | 检查点 | 工具命令 | |------|--------|----------| | 找不到配置项 | 1. 内核版本是否支持该LCD型号<br>2. 硬件描述文件是否包含LCD控制器 | `petalinux-config --listbo` | | 初始化失败 | 1. 时钟频率设置<br>2. 时序参数匹配性 | `dmesg | grep -i lcd` | | 显示异常 | 1. 像素格式(BGR/RGB)<br>2. 显存对齐方式 | `fbset -i` | ### 四、进阶调试方法 通过SystemTap进行实时调试: ```stap
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值