为何我写的控件装不上?(简单,快来)(50分)

  • 主题发起人 主题发起人 李璋琦
  • 开始时间 开始时间

李璋琦

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾,小弟练习写控件,但是以下程序通过编译,单安不上。
请各位帮忙。
unit Tdate;
interface
uses windows,classes,SysUtils, stdctrls;
type
Tdaterdd=class(TButton)
private
FYear,FMonth,Fday:integer;
Fonchange:TNotifyevent;
protected
procedure setMonth(val:integer);
procedure setDay(val:integer);
proceduredo
change;virtual;
public
constructor create(aowner:Tcomponent);override;
property Onchange:TNotifyEvent read FOnchange Write Fonchange;
procedure setvalue(y,m,d:integer);

function gettext:String;
//properties:
Property Day:integer read fday write setday;
Property Month:Integer read fmonth write setmonth;
Property year:integer read fyear write Fyear;
Property Text:string read GetText;
end;
//
EdateOutofRange=class(exception);
procedure register;

implementation
procedure register;
begin
registercomponents('Win95',[Tdaterdd]);
end;

function Tdaterdd.gettext;
begin
gettext:=format('%4d-%2d-%2d',[year,month,day]);
end;

constructor Tdaterdd.create(aowner:Tcomponent);
var
Y,m,d:word;
begin
inherited create(aowner);
Decodedate(now,y,m,d);
Fyear:=y;
Fmonth:=m;
Fday:=d;
end;

procedure Tdaterdd.DoChange;
begin
If Assigned(fOnChange) then
FOnchange(self);
end;

procedure Tdaterdd.setmonth (val:integer);
begin
if (val>=1) and (Val<=12) then
begin
Fmonth:=val;
do
change;
End
else
EdateOutofRange.create('月份超出范围');
end;

Procedure Tdaterdd.setday (val:integer);
begin
if (val>=1) and (Val<=31) then
begin
Fday:=val;
do
Change;
End
else
EdateOutofRange.create('日期超出范围');
end;

procedure Tdaterdd.setvalue(y,m,d:integer);
begin
Fyear:=y;
setmonth(m);
setday(d);
end;

end.
 
我目前发现两个问题:
1.Unit的名称不能叫TDate, 因为System中有Tdate的数据类型,
2.为了property能在属性编辑器中反映;
要用Publish , 而不止
是Public.
 
按你的改了,还是装不上。
 
总得描述一下现象吧?
BTW:gettext函数的写法似乎很不标准,有没有问题?
 
我是按<delphi 3从入门到精通>上的例子写的没有问题,安装时没有任何提示.
编译没有问题,您可以把这段代码拷下来装一下试试.
 
奇怪!!!
我总算试出来了, 起先, 我把你所有的过程,变量,属性全部注释;
还是装不上, 后来发现把
EdateOutofRange=class(exception);注释掉, 立刻就能装上;
把过程,变量,属性还原,(注解掉EdateOutofRange) 仍然可以安装;
把EdateOutofRange=class(exception);还原后, 依然可以安装.
所以我很奇怪!!!
 
我以前遇到过类似文题.
当时我发现register一定要写成Register(大写).
不知道你是不是也是这个问题
 
有可能, 我是将Register改成了大写, 但我没太注意.
 
已经不是有可能了, 一定是Register, 我改成小写后, 原来安装好的立刻
UnRegister了
 
谢谢seasky,glassguo.把register改为Register立刻装上了.:-)
pascal不是不区分大小写吗?我很奇怪
 
后退
顶部