比如我在表单里选了一个button控件,
现在我修改了它的一些属性,
并为它的一些方法事件加上了处理代码,
现在,我想把它保存成一个自定义类,
下次我在其他项目中需要一个同样功能的按钮,
就直接用这个自定义的就可以了,
但,应该怎样来自定义呢,
或者说要用什么代码来写自定义类,
或者,是可以在哪里直接“新建类”?
初涉delphi,还望各位赐教,谢谢。

解决方案 »

  1.   

    不知道你是要设定一个Frames呢,还是要自己开发一个新的控件呢。
    如果是一个Frames很好办,你只要做好你的一个功能模块,然后添加到你的VCL控件板上就可以了,以后使用就可以直接托下来使用,可以使界面风格,功能保持一致。
     如果你要扩展一个类来开发一个新的控件,你可以从菜单Component->new Component来新生成一个新类
      

  2.   

    unit MyButton;interfaceuses
      Windows, Messages, SysUtils, Classes, ExtCtrls,Controls;
    type  TMyButton=Class(TButton)
        private
          //
        protected
          //
        public
          //
        published  
          //
      end;
    procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Mine', [TMyButton]);//安装到Mine面板
    end;保存为PAS单元文件,安装到包中即可!至于override,write ,read,default等细节问题,自己去查查资料!当然也可以利用DELPHI提供的模板,New->Compoents,选择从哪个父类继承,设置好后,自动生成,你所要做的就是添加代码!
      

  3.   

    谢谢两位,现在知道在哪里建类了,但是,怎么建好的这个类,看不到属性呢,比如我现在建一个按钮类,
    我想改它的caption='删除',
    在它的Click中写入:form1.adotable1.delete
    我应该在哪里修改与写入呢还有,假如这个类我建好了,接下来,我新建了一个表单,我又应该如何在这个表单里使用这个类呢?
      

  4.   

    不说了吗?安装到包中,像其它VCL控件一样调用!RegisterComponents('Mine', [TMyButton]);//安装到Mine面板DELPHI上一排选项卡,添加完后会多一个Mine!MyButton.Caption也可以!
      

  5.   

    unit MyButton;interfaceuses
      Windows, Messages, SysUtils, Classes, ExtCtrls,Controls;
    type  TMyButton=Class(TButton)
        public
          procedure Click; override;
          constructor Create(AOwner: TComponent);override;
      end;
    procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Mine', [TMyButton]);//安装到Mine面板
    end;constructor TMyButton.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      Caption:='删除';
    end;procedure TMyButton.Click;
    begin
      inherited;
      form1.adotable1.delete;
    end;end.
    //但它不能单独存在并安装,因为form1.adotable1不存在!
      

  6.   

    谢谢ehom(?!),现在终于可以让这个东西加到我的表单里去了,呵呵,
    不过如你所说,它不能引用不存在的对象,
    那,假如我要引用,要用什么手段来处理呢,
    因为象在建表单时为表单加了一个adotable控件,
    假如在这个自定义组件写了:
    form1.adotable1.delete;
    我以后凡事都用到删除的地方就直接添加这个自定义组件就可以了
      

  7.   

    可以,但不安装即可!直接在Uses里加单元MyButton!
    定义全局变量MyButton1,
    然后在窗体OnCreate事件中加:
    MyButton:=TMyButton.Create(nil);
    MyButton.Parent:=xxx;
    MyButton.Top:=xxx;
    ...Left,Height等都设置下...
      

  8.   

    我还是没做好:(
    帮我看看代码好吗,谢谢//组件代码
    unit BitBtn1;interfaceuses
      Windows, Messages, SysUtils, Classes, Controls, StdCtrls, Buttons;type
      Btn_dele = class(TBitBtn)
      private
        { Private declarations }
      protected
        { Protected declarations }
      public
        procedure Click; override;
        constructor Create(AOwner: TComponent);override;  published
        { Published declarations }
      end;procedure Register;implementationconstructor Btn_dele.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      Caption:='删除';
    end;procedure Btn_dele.Click;
    begin
      inherited;
      form1.adotable1.delete;end;procedure Register;
    begin
      RegisterComponents('samples', [Btn_dele]);
    end;
    end.//表单代码
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,mybtn_dele, DB, Grids, DBGrids, ADODB, StdCtrls;type
      TForm1 = class(TForm)
      mybtn_dele: btn_dele;
        ADOTable1: TADOTable;
        DBGrid1: TDBGrid;
        DataSource1: TDataSource;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        mybtn_dele: btn_dele;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
       Mybtn_dele:=Btn_dele.Create(nil);
    end;end.
    运行通不过,我是不是在表单代码里漏写了什么,请指教,谢谢!
      

  9.   

    不安装的话
    procedure Register;
    begin
      RegisterComponents('samples', [Btn_dele]);
    end;
    是多余的!要在你编写的单元里Uses Unit1,要不哪来的form1.adotable1?