<font color=red> 写个简单控件就这么难??</font>(100分)

  • 主题发起人 主题发起人 千中元
  • 开始时间 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
以前总觉得没有写控件的必要(懒惰的借口),好不容易下决心继承TDBEDit写了个,
还错误连篇:(
下面主要是要给DBEdit添加一个前
缀属性(Prifixtion),然后在OnExit的时候,把Prifixtion属性里的
值和TWaterBookEdit里的值相加,就组成流水帐的值.

type
TWaterBookEdit = class(TDBEdit)
private
GetPrefixion:string;
Fprefixion: string;
Procedure SetPrefixion(const value:string);
{ Private declarations }
protected
Procedure OnExit; override;
{ Protected declarations }
public
constructor create(AOwner:Tcomponent);override;
{ Public declarations }
published
Property prefixion:string read Fprefixion write Setprefixion;
read GetPrefixion write SetPrefixion;
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Md', [TWaterBookEdit]);
end;

{ TWaterBookEdit }

constructor TWaterBookEdit.create(AOwner: Tcomponent);
begin
inherited create(AOwner);

end;
procedure TWaterBookEdit.OnExit;
begin
inherited;
//把text换成text+前缀属性的值 ,但前缀的值怎么表是那??直接用不知道可以否?
text:=text+Prefixion;

end;
procedure TWaterBookEdit.SetPrefixion(const value: string);
begin
GetPrefixion:=Value;
end;
安装时候出现错误信息:
protected
Procedure OnExit; override;
------------[Error] WaterBookEdit.pas(17): Method 'OnExit' not found in base class
可TDbEdit明明有OnExit的.
是不是放错地方了?
 
OnExit是属性, 不是方法,不能用override.
你需要override的是DoExit方法.
 
努力吧!
 
支持千中元!!!!!
 
compile的时候,
([Fatal Error] Could not create output file 'd:/delphi/delphi5/Projects/Bpl/superdelphi.bpl'
--------现在只剩下一个错误
是不是doexit的问题?若直接建立一个新的包,安装以后连控件都不见了
 
eYes一针见血,只见千中元血流成河。:)


回正题:
procedure TWaterBookEdit.OnExit;
不能这样用的。
应该是这样做的

type
TWaterBookEdit = class(TDBEdit)
private
GetPrefixion:string;
Fprefixion: string;
Procedure SetPrefixion(const value:string);
{ Private declarations }
protected
fOnExit: TNotifyEvent;
Procedure OnExit;// not override;
{ Protected declarations }
public
constructor create(AOwner:Tcomponent);override;
{ Public declarations }
published
Property prefixion:string read Fprefixion write Setprefixion;
read GetPrefixion write SetPrefixion;
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Md', [TWaterBookEdit]);
end;

{ TWaterBookEdit }

constructor TWaterBookEdit.create(AOwner: Tcomponent);
begin
inherited create(AOwner);
fOnExit:=OnExit;
end;
procedure TWaterBookEdit.OnExit;
begin
if assigned(fOnExit) then fOnExit;
{**************
&lt; give your source here&gt;
...
text:=text+Prefixion;
*************
}
end;
procedure TWaterBookEdit.SetPrefixion(const value: string);
begin
GetPrefixion:=Value;
end;
基本是这样,但未验证.
 
真不错,
看来问题解决了。
我也少玩这东西。
 
现在暂时还没有用autumn的方法.
把原来的onExit改成DoExit.
(install component--&gt;into new package----&gt;
unit file name(找到我的那个pas文件)------&gt;Package file name(填写playboy)
-----&gt;package playboy.bpl will be rebuilt ,continue?
选择y. 然后----&gt;package---playboy.dpk
就是那个有compile,add ,remove ,等的小框,可是install是灰色的
下一步该怎样做?直接关掉的话找不到这个控件了
 
重新启动delphi
 
现在,换成DoExit,重新启动,装上了,可是实现不了预定的功能
 
嗯,嗯..嗯??????????????
在DoExit事件里,Text=text+Prifixion;
可是不能保存到数据库中.又不能调用什么post,这可怎么办???
 
千中元你的代码写得挺乱的呵


procedure TWaterBookEdit.SetPrefixion(const value: string);
begin
GetPrefixion:=Value;
end;
改成
procedure TWaterBookEdit.SetPrefixion(const value: string);
begin
FPrefixion:=Value;
end;

还有

published
Property prefixion:string read Fprefixion write Setprefixion;
read GetPrefixion write SetPrefixion;
{ Published declarations }
end;
编译竟然能通过?
把GetPrefixion去掉好了,根本没用到





 
cheka你来马后炮,你说的问题已经解决了。已经给你发email(paul).
现在还剩下的问题:
1)Value的使用,在什么时候给的Value值
2)加的前缀不能保存.我也想不出来用怎么保存这个值
 
多人接受答案了。
 
后退
顶部