我写的一个控件继承自TGraphicControl类,但其中没有OnClick事件,我想加入此事件,怎么写代码。(50分)

  • 主题发起人 主题发起人 ayu310
  • 开始时间 开始时间
A

ayu310

Unregistered / Unconfirmed
GUEST, unregistred user!
急!在线等
 
参见我的原文:
有几个朋友和同事问我怎样写控件,下面例子是派生一个Tedit;
添加一个dcs:integer的属性和一个onrightclick(鼠标右键单击)的事件;
与大家共享!
unit DcsEdit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TDcsEdit1 = class(TEdit)
private
Frightclick:TnotifyEvent;//如果你需要在事件里面带参数,参看TnotifyEvent
Fdcs:integer;
procedure getrightclickmeg(VAR Msg:TMessage);message WM_RBUTTONDOWN;//捕获鼠标右键单击消息
function reddcs:integer;
procedure setdcs(input:integer);
protected
public
constructor Create(AWoner:TComponent);override;
destructor Destroy;override;
published
property dcs:integer read reddcs write setdcs ;
property Onrightclick:TnotifyEvent read Frightclick write Frightclick;
end;

procedure Register;

implementation
constructor TDcsEdit1.Create(AWoner:TComponent);
begin
inherited Create(AWoner);
end;
function TDcsEdit1.reddcs:integer;
begin
result:=Fdcs;
end;
procedure TDcsEdit1.setdcs(input:integer);
begin
Fdcs:=input;
end;
destructor TDcsEdit1.Destroy;
begin
inherited Destroy;
end;
procedure TDcsEdit1.getrightclickmeg(VAR Msg:TMessage);
begin
if Assigned(Frightclick) then
Frightclick(self);
end;
procedure Register;
begin
RegisterComponents('Samples', [TDcsEdit1]);
end;

end.
 
protected
property OnClick: TNotifyEvent read FOnClick write FOnClick stored IsOnClickStored;

TGraphicControl继承自TControl.所以有OnClick事件.他是一个protected的属性,
你在自已的继承自TGraphicControl的类中把这个事件override为PUBLIC属性就可以
用了.
也就是说
public
property OnClick; override;就可以了.
 
to _Murray:
能不能说的详细点,我我把property OnClick; override;加到public中,提示:Filed definition not allowed after methods or property.我是新手,请指教.
 
也许是你放的位置不对.不能放在方法后面.根据提示,好像也不能放在属性后面.可能是因为它是override吧.
 
published
property OnClick;
end;
就行了,不用override
 
问题解决了,谢谢各位
应该是加入protected段内,在实现代码里写上inherited click;就行了
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部