比如我在表单里选了一个button控件,
现在我修改了它的一些属性,
并为它的一些方法事件加上了处理代码,
现在,我想把它保存成一个自定义类,
下次我在其他项目中需要一个同样功能的按钮,
就直接用这个自定义的就可以了,
但,应该怎样来自定义呢,
或者说要用什么代码来写自定义类,
或者,是可以在哪里直接“新建类”?
初涉delphi,还望各位赐教,谢谢。
现在我修改了它的一些属性,
并为它的一些方法事件加上了处理代码,
现在,我想把它保存成一个自定义类,
下次我在其他项目中需要一个同样功能的按钮,
就直接用这个自定义的就可以了,
但,应该怎样来自定义呢,
或者说要用什么代码来写自定义类,
或者,是可以在哪里直接“新建类”?
初涉delphi,还望各位赐教,谢谢。
解决方案 »
- 为什么iCode参数小于0时才调用CallNextHookEx
- 更换了个系统的字体,软件就无法打开了!十万火急!!!
- 求救:如何定义一个结构体链表?
- 一条sql语句问题
- [大侠们,快快救命阿!] Delphi7在使用informix时遇到的问题。急!
- 关于QuickReport预览时图片显示正确,但有时打印时图片显示为黑色图片
- 请问抓屏幕键盘 在OnKeyDown 的key是多少。。。
- 请教大家!last 和 findlast 的区别? 在线等待,马上给分!
- 各位好友,对于窗体右上角的(X)变灰,我还想保留最大和最小化按钮,他们可以用只有(X)变灰
- 高手请进!如何用独立的线程控制特定的窗体???
- 关于登录的小问题!
- Dephi做串口通信用哪个控件?
如果是一个Frames很好办,你只要做好你的一个功能模块,然后添加到你的VCL控件板上就可以了,以后使用就可以直接托下来使用,可以使界面风格,功能保持一致。
如果你要扩展一个类来开发一个新的控件,你可以从菜单Component->new Component来新生成一个新类
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,选择从哪个父类继承,设置好后,自动生成,你所要做的就是添加代码!
我想改它的caption='删除',
在它的Click中写入:form1.adotable1.delete
我应该在哪里修改与写入呢还有,假如这个类我建好了,接下来,我新建了一个表单,我又应该如何在这个表单里使用这个类呢?
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不存在!
不过如你所说,它不能引用不存在的对象,
那,假如我要引用,要用什么手段来处理呢,
因为象在建表单时为表单加了一个adotable控件,
假如在这个自定义组件写了:
form1.adotable1.delete;
我以后凡事都用到删除的地方就直接添加这个自定义组件就可以了
定义全局变量MyButton1,
然后在窗体OnCreate事件中加:
MyButton:=TMyButton.Create(nil);
MyButton.Parent:=xxx;
MyButton.Top:=xxx;
...Left,Height等都设置下...
帮我看看代码好吗,谢谢//组件代码
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.
运行通不过,我是不是在表单代码里漏写了什么,请指教,谢谢!
procedure Register;
begin
RegisterComponents('samples', [Btn_dele]);
end;
是多余的!要在你编写的单元里Uses Unit1,要不哪来的form1.adotable1?