以下是源码,运行后点击按钮会出现message.但我希望组件在放在表单上后,在设计时期还可以为OnBtnClick写代码,请教封装组件的正确写法.谢谢!unit OPEN;interfaceuses
SysUtils, Classes, Controls, StdCtrls, Messages,ExtCtrls,Dialogs;type
TOPEN = class(TWinControl)
private
FDJNO:TEdit;
FBtnOpen: TButton;
{ Private declarations }
protected
{ Protected declarations }
public
constructor Create(AOwner:TComponent);override;
destructor destroy;override;
{ Public declarations }
published
procedure OnBtnClick(Sender: TObject);
{ Published declarations }
end;procedure Register;implementation//--------------------
procedure Register;
begin
RegisterComponents('MyCls', [TOPEN]);
end;//--------------------
constructor TOPEN.Create(AOwner:TComponent);
begin
inherited;
Height:=40;
width:=157; FDJNO:=TEdit.Create(nil);
FDJNO.parent:=self;
FDJNO.top:=11;
FDJNO.left:=50;
FDJNO.width:=58; FBtnOpen:=TButton.Create(nil);
FBtnOpen.parent:=self;
FBtnOpen.top:=11;
FBtnOpen.left:=111;
FBtnOpen.width:=32;
FBtnOpen.caption:='开启';
FBtnOpen.OnClick := OnBtnClick;
end;//---------
destructor TOPEN.destroy;
begin
FDJNO.free;
FBtnOpen.free;
inherited;
end;//---------
procedure TOPEN.OnBtnClick(Sender: TObject);
begin
showmessage('btn click');
end;end.
SysUtils, Classes, Controls, StdCtrls, Messages,ExtCtrls,Dialogs;type
TOPEN = class(TWinControl)
private
FDJNO:TEdit;
FBtnOpen: TButton;
{ Private declarations }
protected
{ Protected declarations }
public
constructor Create(AOwner:TComponent);override;
destructor destroy;override;
{ Public declarations }
published
procedure OnBtnClick(Sender: TObject);
{ Published declarations }
end;procedure Register;implementation//--------------------
procedure Register;
begin
RegisterComponents('MyCls', [TOPEN]);
end;//--------------------
constructor TOPEN.Create(AOwner:TComponent);
begin
inherited;
Height:=40;
width:=157; FDJNO:=TEdit.Create(nil);
FDJNO.parent:=self;
FDJNO.top:=11;
FDJNO.left:=50;
FDJNO.width:=58; FBtnOpen:=TButton.Create(nil);
FBtnOpen.parent:=self;
FBtnOpen.top:=11;
FBtnOpen.left:=111;
FBtnOpen.width:=32;
FBtnOpen.caption:='开启';
FBtnOpen.OnClick := OnBtnClick;
end;//---------
destructor TOPEN.destroy;
begin
FDJNO.free;
FBtnOpen.free;
inherited;
end;//---------
procedure TOPEN.OnBtnClick(Sender: TObject);
begin
showmessage('btn click');
end;end.
FOnBtnClick : TNotifyEvent;
published
property OnBtnClick: TNotifyEvent read FOnBtnClick write FOnBtnClick;
按您讲的做了,下面是全部代码,但关于 TOPEN.FOnBtnClick 的代码无论怎样修改,都说
[Error] OPEN.pas(69): Declaration of 'FOnBtnClick' differs from previous declaration
//---------------------------------------
unit OPEN;interfaceuses
SysUtils, Classes, Controls, StdCtrls, Messages,ExtCtrls,Dialogs;type
TOPEN = class(TWinControl)
private
FDJNO:TEdit;
FBtnOpen: TButton;
FOnBtnClick : TNotifyEvent;
{ Private declarations }
protected
{ Protected declarations }
public
constructor Create(AOwner:TComponent);override;
destructor destroy;override;
{ Public declarations }
published
// procedure OnBtnClick(Sender: TObject);
property OnBtnClick: TNotifyEvent read FOnBtnClick write FOnBtnClick;
{ Published declarations }
end;procedure Register;implementation//--------------------
procedure Register;
begin
RegisterComponents('MyCls', [TOPEN]);
end;//--------------------
constructor TOPEN.Create(AOwner:TComponent);
begin
inherited;
Height:=40;
width:=157; FDJNO:=TEdit.Create(nil);
FDJNO.parent:=self;
FDJNO.top:=11;
FDJNO.left:=50;
FDJNO.width:=58; FBtnOpen:=TButton.Create(nil);
FBtnOpen.parent:=self;
FBtnOpen.top:=11;
FBtnOpen.left:=111;
FBtnOpen.width:=32;
FBtnOpen.caption:='开启';
FBtnOpen.OnClick := FOnBtnClick;
end;//----------
destructor TOPEN.destroy;
begin
FDJNO.free;
FBtnOpen.free;
inherited;
end;procedure TOPEN.FOnBtnClick;
//procedure TOPEN.OnBtnClick(Sender: TObject);
//procedure TOPEN.OnBtnClick(Sender: TObject);TNotifyEvent;
begin
showmessage('组件中按了btn ');
end;end.
procedure OnBtnClick(Sender: TObject);
procedure TOPEN.OnBtnClick(Sender: TObject);
begin
if assinged(FOnBtnClick) then
OnBtnClick(self)
showmessage('组件中按了btn ');
end;
各位能否把一楼的代码复制到您的机器上试试呢?
里
FBtnOpen.OnClick := OnBtnClick;该了吗?
SysUtils, Classes, Controls, StdCtrls, Messages,ExtCtrls,Dialogs;type
TOPEN = class(TWinControl)
private
FDJNO:TEdit;
FBtnOpen: TButton;
FOnBtnClick : TNotifyEvent;
{ Private declarations }
protected
{ Protected declarations }
public
constructor Create(AOwner:TComponent);override;
destructor destroy;override;
{ Public declarations }
published
procedure BtnClick(Sender: TObject);
{ Published declarations }
property OnBtnClick: TNotifyEvent read FOnBtnClick write FOnBtnClick; end;procedure Register;implementation//--------------------
procedure Register;
begin
RegisterComponents('MyCls', [TOPEN]);
end;//--------------------
constructor TOPEN.Create(AOwner:TComponent);
begin
inherited;
Height:=40;
width:=157; FDJNO:=TEdit.Create(nil);
FDJNO.parent:=self;
FDJNO.top:=11;
FDJNO.left:=50;
FDJNO.width:=58; FBtnOpen:=TButton.Create(nil);
FBtnOpen.parent:=self;
FBtnOpen.top:=11;
FBtnOpen.left:=111;
FBtnOpen.width:=32;
FBtnOpen.caption:='开启';
FBtnOpen.OnClick := BtnClick;
end;//---------
destructor TOPEN.destroy;
begin
FDJNO.free;
FBtnOpen.free;
inherited;
end;//---------
procedure TOPEN.BtnClick(Sender: TObject);
begin
showmessage('btn click');
if assigned(FOnBtnClick) then
OnBtnClick(self);
end;end.
谢谢了,接分!