如何给Form添加一个Published的事件?(300分)

  • 主题发起人 主题发起人 EvilRoach
  • 开始时间 开始时间
E

EvilRoach

Unregistered / Unconfirmed
GUEST, unregistred user!
[?]我需要自己制作一个Form类,就叫它做TMyForm吧。
需要给它加上一个Published事件,就象制作控件时一样,
能够在Object Inspector中显示出来,
并和原来的事件一样被使用。

谢谢!
 
试试下面的吧。怎么样?给分吧。
unit MyForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TAuditEvent=procedure (Sender:TObject;Allowed:Boolean) of Object;
TMyForm = class(TForm)
private
FAuditEvent: TAuditEvent;
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
procedure DoAudit();
property OnAuditEvent : TAuditEvent read FAuditEvent write FAuditEvent;
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TMyForm]);
end;
{ TMyForm }
procedure TMyForm.DoAudit;
begin
if Assigned(FAuditEvent) then FAuditEvent((owner as TForm),false);
end;
end.
 
老大,看看书、查查资料再来提问题了,300分,偶要苦很多天呀[:D]
 
如果要共享数据的话,可以写Dll,或用内存映射。[:)]
 
办法是有的,不过有一点麻烦:
先建立一个Package,然后写你的TForm的子类,和控件一样,写在一个Unit中。
然后Unit的Interface部分要申明:
Uses
DesignIntf;
Procedure Register;

在Impelmentation部分实现Procedure Register,调用RegisterCustomModule来注册你的模块类,和写控件的方法完全一样。
RegisterCustomModule过程定义在DesignIntf单元中,具体用法我已经记不清楚了,挺麻烦的。
 
Scarlette
在Delphi6中没有DesignIntf这个类。
 
To marknew: 你的方法我早就想过,如果行,我就不花300分来问了。不过我还是在试了一次,
确实不行,你自己试过这代码吗?如果是做一般的控件,当然没问题,一般的控件你可以将
其从控件面板上拖放至某一容器窗口(或数据模块)来创建它,可是我们要做的是窗口,如
果非要把TMyForm拖放至某一容器对象,才能使用它的话,我们又何必做这个控件呢?
 
分数还能不能再提高啊!!!
 
我想Scarlette的意思DesignIntf不是指一个类,而是一个Unit名称,对吧?Scarlette?
一般写控件都要Uses这个Unit,我也常看其中的代码,可奇怪的是Delphi故意不
把它放在缺省的搜索路径中,而放在ToolsAPI目录下。
而且更奇怪的是Delphi对这个单元里的东西,只提供极其有限的帮助,
Scarlette所说的RegisterCustomModule过程就没有帮助,甚至极少有Delphi自己的源码
调用它(自己看源码学习都困难)。
Scarlette,你能详细说说它是怎么用的吗?非常感谢!
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=599794
 
同意Scarlette的观点
 
在Delphi的IDE控件面板上注册从TCustomForm继承下来的新类是没有意义的,
所以不能用marknew的方法,用Scarlette的方法也比较麻烦!
 
谢谢softdog的帖子,搞定了!
 
后退
顶部