如何生成自定义的事件(Event)?(30分)

  • 主题发起人 主题发起人 demonP
  • 开始时间 开始时间
D

demonP

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在主FORM的类中加一个自定义的EVENT,
于是写了如下代码,但编译通不过,错误
为:read/write 应使用字段或方法 。
FOnMyEv难道不是个字段么?我这两天
脑子有点糊涂...
BTW:如果我想声明的事件能出现在“对象观察器”
的事件列表里的话,象下面一样把事件声明在
PUBLISHED段是不是就可以了?
谢谢!
type
TForm1 = class(TForm)
property OnMyEv : TNotifyEvent read FOnMyEv write FOnMyEv;
private
{ Private declarations }
public
{ Public declarations }
FOnMyEv:TNotifyEvent;
end;

应该是发错了问题分类,但本区人多,所以...

 
应该这样吧...
type
TForm1 = class(TForm)
private
{ Private declarations }
FOnMyEv:TNotifyEvent;
public
{ Public declarations }
property OnMyEv : TNotifyEvent read FOnMyEv write FOnMyEv;
end;
 
你说的对,难道就是因为不能在PUBLISHED
区声明自己的事件么?
 
在 protected, public, published 区声明都可以。
但要先定义 FOnmyev。
 
谢谢老兄,我发现我确实没搞清楚DELPHI的
类声明里各个成员出现的顺序往往很重要,
我以前主要用VC,在C++里很少会在这个方面
遇到问题。
不过有一点我还想知道,就算我把自己的事件
定义在PUBLISHED区,可是它还是不能够出现
在对象的事件页里;而且就算我把它加到
FORM.PAS里情况还是一样。
对于其它COMPONENT可以派生自己的类,然后加入
新的特性,但对FORM能不能做到呢,如果能做到
任意为FORM增减特性(包括事件),那样会比直接
处理消息方便一些吧
 
直接在当前Form下添加属性是无法在对象浏览器中看到的,
至于修改Form.pas,估计是由于Form.pas已是先编译成了
.dcu,你试着再编译一下看看
 
cheka,我也这么想,我试试重新编译DCU。
不过我自己从TFORM派生的类中的自定义事件
怎么也无法在对象浏览器中看到呢?(定义在
PUBLISHED区)
 
在对象浏览器中看到自定义事件如下所写,不知你是怎么写的。
TMyevEvent = procedure(Sender: TObject) of object;
private
FOnMyEv: TMyevEvent ;
published
property OnMyEv : TMyevEvent read FOnMyEv write FOnMyEv;

 
TForm是特殊的控件,那么就特殊对待吧。
对于让TForm的子类中的自定义事件在对象浏览器中看到,
其实也不是没有办法,比如把这样的子类TMyForm注册为新控件:
procedure Register;
RegisterComponents('Test', [TMyForm]);
end;
应该是可以的。但这样的Form又怎么用呢?把它放到Form1上么?
我试了试,还是打住吧。
另外,forms.pas 是最费劲的单元,看明白了就是高手了。
 
Croco兄,你说的方法应该是可以的,正如你说的
真不知道这样的控件该怎么用,看来FORM还得想其他
办法才能定制它的DESIGN-TIME特性了。我试过跟踪
FORM的执行情况,但根本进不去,是不是DELPHI里
不能跟踪到VCL内部? VC就可以。如果不能跟踪VCL
的执行情况,想弄清楚FORM等元件的低层就很难了。
我看目前只能 解决到这个程度了,以后有什么发现
再讨论吧。

FUDEI,你说的方法是自定义构件时的标准做法,但
对FORM这个特殊构件似乎就不太合适,就象CROCO说
的情况,如果不能用自己的FORM替换原来的,就不知道
该怎么用了。

 
Croco,我刚才提出的调试VCL的问题,看了一篇高手的
文章受了启发,D3/D4见论坛里沈前卫高手介绍的方法,
我现在用D5,上面的方法要改改,比原来简单了,只要
在工程-》OPTION-》COMPILE里选上 USE DEBUG DCUS
就万事大吉了,这下有办法可以把DELPHI给看透了。
 
接受答案了.
 
croco兄,真是对不起,本该把分给你的,但一不小心按错
了,很感谢你的帮助,只能再说声谢谢了。
 
要命,受之有愧哦
 

Similar threads

后退
顶部