您的位置:首页 > 其它

自定义组件注册的问题

2006-04-10 16:26 323 查看
我按照 d5 开发人员指南上的例子写了一个组件,但无法注册到面板上

注册时没有任何的错误,但就是不能注册到面板上

先看没有改前的程序

unit HalfM;

interface
uses classes,windows,extctrls,sysutils,Controls;

type
TTimeEvent = procedure (Sender:TObject;theTime:TDatetime) of object;
THalfM = class(Tcustomcontrol)
private
FTimer:TTimer;
FOnHalfMinutes:TTimeEvent;
FOldSecond,FSecond:word;
procedure FTimerTimer(sender:tobject);
public
constructor create(AOwner:TComponent);override;
destructor destroy();override;
protected
procedure DoHalfMinute(theTime:TDateTime);dynamic;
published
property OnHalfinute:TTimeEvent read FOnHalfMinutes write FOnHalfMinutes;

end;
procedure register;
implementation

constructor THalfM.create(aOwner:TComponent);
begin
inherited create(Aowner);

if not ( csDesigning in self.ComponentState ) then
begin
Ftimer := TTimer.Create(self);
FTimer.Enabled := true;
FTimer.Interval := 500;
FTimer.OnTimer := FTimerTimer;

end;
end;

destructor THalfM.destroy();
begin
FTimer.Free;
inherited destroy;
end;

procedure THalfM.FTimerTimer(sender:tobject);
var
DT:TDateTime;
temp:word;
begin
DT:=now;
FOldSecond := FSecond; // 保存旧时间
DecodeTime(dt,temp,temp,FSecond,temp);
if FSecond <> FOldSecond then
if ( ( FSecond=30 ) or ( FSecond=0 ) ) then
self.DoHalfMinute(DT);
end;

procedure THalfM.DoHalfMinute(theTime:TDatetime);
begin
if Assigned(FOnHalfMinutes) then
FOnHalfMinutes(self,theTime);
end;
procedure Register;
begin
RegisterComponents('Test', [THalfM]);
end;

end.

------------------------------------------
改动后的程序

unit HalfM;

interface
uses classes,windows,extctrls,sysutils,Controls;

type
TTimeEvent = procedure (Sender:TObject;theTime:TDatetime) of object;
THalfM = class(Tcustomcontrol)
private
FTimer:TTimer;
FOnHalfMinutes:TTimeEvent;
FOldSecond,FSecond:word;
procedure FTimerTimer(sender:tobject);
public
constructor create(AOwner:TComponent);override;
destructor destroy();override;
protected
procedure DoHalfMinute(theTime:TDateTime);dynamic;
published
property OnHalfinute:TTimeEvent read FOnHalfMinutes write FOnHalfMinutes;

end;
procedure Register;
implementation

constructor THalfM.create(aOwner:TComponent);
begin
inherited create(Aowner);

if not ( csDesigning in self.ComponentState ) then
begin
Ftimer := TTimer.Create(self);
FTimer.Enabled := true;
FTimer.Interval := 500;
FTimer.OnTimer := FTimerTimer;

end;
end;

destructor THalfM.destroy();
begin
FTimer.Free;
inherited destroy;
end;

procedure THalfM.FTimerTimer(sender:tobject);
var
DT:TDateTime;
temp:word;
begin
DT:=now;
FOldSecond := FSecond; // 保存旧时间
DecodeTime(dt,temp,temp,FSecond,temp);
if FSecond <> FOldSecond then
if ( ( FSecond=30 ) or ( FSecond=0 ) ) then
self.DoHalfMinute(DT);
end;

procedure THalfM.DoHalfMinute(theTime:TDatetime);
begin
if Assigned(FOnHalfMinutes) then
FOnHalfMinutes(self,theTime);
end;
procedure Register;
begin
RegisterComponents('Test', [THalfM]);
end;

end.

---------------------
这样根本看不出是哪里错来,但仔细一看,还是有区别的,看没改前的

Interface 部分的

procedure register;

和改动后的有什么不同

procedure Register;

就一个 R 的大小写的问题,如果小写则无法注册到面板上,大写则可以
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: