在开发复合控件的时候,希望有个简单的方法将不同子控件的属性全部显示出来,并且可以设置使用。

解决方案 »

  1.   

    在哪里设置呢?在Create里面设置了不行的,没有反应的。
      

  2.   

    把父类的属性显示出来就可以.
    到父类中把你想要的属性下到published下就可以了.
    就可以在设计器实现设计.
      

  3.   

    我也有同样的问题,请指教,错在哪里unit LabelDBEdit;interfaceuses
      SysUtils, Classes, Controls,DBCtrls,StdCtrls,ExtCtrls,Messages,Forms;type
      TLabelDBEdit = class(TWinControl)
      private
        { Private declarations }
        FDBedit:TDBEdit;
        FLabel:TLabel;
        FBevel:TBevel;
        procedure FSetDBEdit(AValue:TDBEdit);
        procedure FSetLabel(AValue:TLabel);
      protected
        { Protected declarations }
        procedure   Notification(AComponent:   TComponent;   Operation:   TOperation); override;
        procedure WMSize(var Msg: TMessage);message WM_SIZE;
      public
        { Public declarations }
        constructor Create(AOwner: TComponent);override;
        destructor Destroy;override;
      published
        { Published declarations }
        property EditLabel:TLabel read FLabel write FSetLabel;
        property EditDBEdit:TDBEdit read FDBedit write FSetDBEdit;
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('ErpControl', [TLabelDBEdit]);
    end;constructor TLabelDbEdit.Create(Aowner:TComponent);
    begin
      inherited;
      Self.Width:=200;
      self.Height:=17;
      FDBedit:=TDBEdit.Create(nil);
      with FDBedit do
      begin
          Parent:=Self;
          AutoSize:=false;
          Height:=17;
          BorderStyle:=bsNone;
          BevelKind:=bkFlat;
          Left:=self.Left - Width;
          SetSubComponent(True);
      end;  FLabel:=TLabel.Create(nil);
      FLabel.Parent:=Self;  FBevel:=TBevel.Create(nil);
      with FBevel do
      begin                           
          Parent:=Self;
          Shape:=bsTopLine;
          Height:=1;
      end;  FLabel.Caption:='LabelEdit';
      FLabel.Left:=0;
      FLabel.SetSubComponent(True);
    end;destructor TLabelDBedit.Destroy;
    begin
      FDBedit.Free;
      FLabel.Free;
      FBevel.Free;
      inherited Destroy;
    end;procedure TLabelDBEdit.WMSize(var msg:TMessage);
    begin
      Height:=17;
      FLabel.Left:=0;
      FDBedit.Left:=self.Width - FDBedit.Width ;
      with FBevel do
      begin
          Top:=16;
          Left:=0;
          Width:=self.Width;
      end;
    end;procedure TLabelDBEdit.Notification(AComponent: TComponent;
      Operation: TOperation);
    begin
      inherited Notification(AComponent, Operation);
      if (Operation = opRemove) then
        if AComponent = EditLabel then
            FLabel:=nil
         else if AComponent = EditDBEdit then
           FDBedit:=nil;
    end;
    //
    procedure TLabelDBEDit.FSetDBEdit(AValue:TDBEdit);
    begin
        FDBedit:=AValue;
        if Avalue <> nil then
        begin
            FDBedit.SetSubComponent(True);
            FDBedit.FreeNotification(Self);
        end;
    end;procedure TLabelDBEDit.FSetLabel(AValue:TLabel);
    begin
        FLabel:=AValue;
        if Avalue <> nil then
        begin
            FLabel.SetSubComponent(true);
            FLabel.FreeNotification(Self);
        end;
    end;end. 
    editDBedit及editlabel 属性出不来,在 object inspector中, editDBedit及editlabel, 但属性栏为空, 不知道错在哪,请各位指教