Delphi 组件渐进开发浅谈(二)——双简合璧

本文介绍了在Delphi中基于TLabel和TBoundLabel组件进行自定义组件开发的过程,探讨了如何通过接口设计解决TTntBoundLabel限制其所有者的问题。文章详细阐述了创建TGcxCustomLabel、TGcxBoundLabel,以及实现IBoundLabelOwner接口,以实现更灵活的组件绑定。最后,展示了如何在TGcxCustomLabeledEdit和TGcxCustomIntLabeledEdit中应用这些改进,实现组件的‘双剑合璧’。
摘要由CSDN通过智能技术生成

  转载请指明出处来源。    

2.双简合璧
2.1.带有T[x]Label的T[x]Edit组件
  请允许我用[x]的书写方式来表示不同的对象。因为随后将大量提及TLabeledEdit与TTntLabeledEdit、TCustomLabeledEdit与TTntCustomLabeledEdit这样及其雷同的类。
2.2.分析T[x]LabeledEdit组件结构
  现在要设计一个类似TLabeledEdit的组件,查看ExtCtrls的TLabeledEdit定义如下:
  TLabeledEdit = class(TCustomLabeledEdit)
  TLabeledEdit从TCustomLabeledEdit继承并开放属性,TCustomLabeledEdit部分定义如下:
  TCustomLabeledEdit = class(TCustomEdit)
  private
    FEditLabel: TBoundLabel;
  Public
    property EditLabel: TBoundLabel read FEditLabel;
  可以看出来,TCustomLabeledEdit继承自TCustomEdit,并构造了一个TBoundLabel对象。
TBoundLabel对象定义如下:
  TBoundLabel = class(TCustomLabel)
  TBoundLabel与TLabel都是从TCustomLabel继承,两者溯本逐源,是兄弟关系。
  TLabeledEdit的源头是TCustomEdit和TCustomLabel,而TTntLabeledEdit的源头是TTntCustomEdit和TTntCustomLabel。T[x]CustomEdit和T[x]CustomLabel结合而形成了T[x]CustomLabeledEdit。
  在这里,T[x]CustomEdit和T[x]CustomLabel如同夫妻,两者与T[x]CustomLabeledEdit如同父(母)子关系。
  上一章设计的TGcxCustomEdit和TGcxCustomIntEdit可以替代T[x]CustomEdit,现在我们需要一个新的T[x]BoundLabel对象。
2.3.设计TGcxCustomLabel和TGcxBoundLabel
2.3.1.设计TGcxCustomLabel

  为了求简单,我们先简化TGcxCustomLabel设计,直接从TTntCustomLabel派生,不做任何修改。
  TGcxCustomLabel = class(TTntCustomLabel)
  end;
2.3.2.从TBoundLabel、TTntBoundLabel到TGcxBoundLabel
  TBoundLabel的部分定义:
  TBoundLabel = class(TCustomLabel)
  private
    function GetTop: Integer;
    function GetLeft: Integer;
    function GetWidth: Integer;
    function GetHeight: Integer;
    procedure SetHeight(const Value: Integer);
    procedure SetWidth(const Value: Integer);
  protected
    procedure AdjustBounds; override;
  public
    constructor Create(AOwner: TComponent); override;
  TTntBoundLabel的部分定义:
  TTntBoundLabel 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值