【问题标题】:Is it possible to connect a property to an embedded component是否可以将属性连接到嵌入式组件
【发布时间】:2012-10-25 20:05:07
【问题描述】:

我想编写一个嵌入其他组件的复杂组件。但我不确定我是否能够通过对象检查器连接到这些组件。

为了澄清,想象一个包含TDataSources 列表的组件。这些 DataSource 组件归该组件所有,在表单上不可见。

现在我想将TDataset 连接到这些数据源之一,这可能吗,这些数据源会显示在数据集的属性编辑器组合中吗?

【问题讨论】:

    标签: delphi ide components embed design-time


    【解决方案1】:

    可以,但您必须输入(或复制)名称;您无法在 OI 中选择它。

    使用下面编写的组件,您可以输入例如MyComp1.InternalDataSource 到 DBGrid 的 DataSource 属性中:

    uses
      Classes, DB;
    
    type
      TMyComp = Class(TComponent)
      private
        FDataSource: TDataSource;
      public
        constructor Create(AOwner: TComponent);override;
      published
        property DataSource: TDataSource read FDataSource;
      end;
    
    procedure Register;
    
    implementation
    
    procedure Register;
    begin
      RegisterComponents('TEST', [TMyComp]);
    end;
    
    { TMyComp }
    
    constructor TMyComp.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      FDataSource := TDataSource.Create(Self);
      FDataSource.Name := 'InternalDataSource';
    end;
    

    【讨论】:

    • 该属性设置不会保存/流式传输到 DFM,因此您每次在设计器中打开表单时都必须进行设置,并且仍需要在运行时进行设置。
    • object DBEdit1: TDBEdit Left = 40 Top = 128 Width = 121 Height = 21 DataField = 'Name' DataSource = MyComp1.InternalDataSource TabOrder = 0 end 将被存储,分配给surfacedataset只是为了测试,假设是组件的一部分。
    • 是的,这更符合主题,也是一个很好的例子,遗憾的是,使用 ObjectInspector 的能力至关重要,所以我必须想出一个不同的策略,但无论如何我都会接受答案,因为它回答了标题中的问题,而答案是否定的(至少不是通过 OI)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2020-04-01
    • 2015-02-24
    • 2016-08-04
    • 2010-10-01
    • 2020-01-30
    • 2011-04-01
    相关资源
    最近更新 更多