用一个Panel作为父窗口,在Create事件中动态生成各个需要的控件,并且按照自己的排列顺序放好。

解决方案 »

  1.   

    把你想要作上去的组件都作为属性
    在create构造函数中创建,并指定位置即可。
      

  2.   

    netlib(河外孤星):
    能给一个简单的框架吗?谢谢!
      

  3.   

    unit TestEdit;  interface  uses  Windows, Messages, SysUtils, Classes, Graphics, Controls,  Forms, Dialogs, StdCtrls;  type  TTestEdit = class(TEdit)  private    FButton: TButton;  protected    procedure ButtonClick(Sender: TObject);  public    constructor Create( AOwner: TComponent ); override;  published  end;  procedure Register;  implementation  procedure TTestEdit.ButtonClick(Sender: TObject);begin  Text := DateToStr(Now);end;  constructor TTestEdit.Create( AOwner: TComponent );begin  inherited Create(AOwner);  Text := DateToStr(Now);  FButton := TButton.Create( self );  FButton.Visible := true;  FButton.Parent := self;  FButton.Height := Height-2;  FButton.Width := Height-2;  FButton.Left := Width - Height - 2;  FButton.top := top;  FButton.OnClick := ButtonClick;end;  procedure Register;begin  RegisterComponents('Standard', [TTestEdit]);end;  end.
      

  4.   

    unit panel1;interfaceuses
      Windows, Messages, SysUtils, Classes, Controls, ExtCtrls;type
      tpanel1 = class(TPanel)
      private
        Fbutton: Tbutton;
        procedure Setbutton(const Value: Tbutton);
        { Private declarations }
      protected
        { Protected declarations }
      public
        { Public declarations }
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      published
        { Published declarations }
        property button:Tbutton read Fbutton write Setbutton;
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Samples', [tpanel1]);
    end;{ tpanel1 }constructor tpanel1.Create(AOwner: TComponent);
    begin
      inherited;
      FButton:=TButton.create(self);
    end;destructor tpanel1.Destroy;
    begin
      Fbutton.free;
      inherited;
    end;procedure tpanel1.Setbutton(const Value: Tbutton);
    begin
      Fbutton := Value;
    end;end.
      

  5.   

    首先谢谢二位!
    但我自己换了一个DBGrid,再安装此组件后,测试时单击按钮却没事件发生?请大家再帮忙看看!unit TestGrid;interfaceuses  Windows, Messages, SysUtils, Classes, Graphics, Controls,
      Forms, Dialogs, DBGrids, StdCtrls;type  TTestGrid = class(TDBGrid)  private    FButton: TButton;  protected    procedure ButtonClick(Sender: TObject);  public    constructor Create( AOwner: TComponent ); override;  published  end;procedure Register;
    implementationprocedure TTestGrid.ButtonClick(Sender: TObject);begin
      ShowMessage('OK!');
    end;
    constructor TTestGrid.Create( AOwner: TComponent );begin  inherited Create(AOwner);
      FButton := TButton.Create( self );
      FButton.Visible := true;
      FButton.Parent := self;
      FButton.Height := 18;
      FButton.Width := 12;
      FButton.Left := Left;
      FButton.top := top;
      FButton.Caption:='..';
      FButton.BringToFront;
      FButton.OnClick := ButtonClick;
    end;procedure Register;
    begin  RegisterComponents('Standard', [TTestGrid]);end;end.