Delphi 使用Child';s事件

Delphi 使用Child';s事件,delphi,delphi-xe2,Delphi,Delphi Xe2,我有一个自定义组件(TScrollBox),当它被放到表单上时,它会在滚动框中添加一个标签。如何禁用ScrollBox的事件(onClick、OnMouseDown、etc..),而代之以启用子项(Tlabel)的事件 t控件的事件处理程序声明为受保护和动态。在派生类中使用override指令重新声明它们-请参阅 还有很多其他的页面 但是:如果你想实现你自己的新事件,你必须这样做: ... private fNewEvent:TNotifyEvent; pro

我有一个自定义组件(TScrollBox),当它被放到表单上时,它会在滚动框中添加一个标签。如何禁用ScrollBox的事件(onClick、OnMouseDown、etc..),而代之以启用子项(Tlabel)的事件


t控件
的事件处理程序声明为
受保护
动态
。在派生类中使用
override
指令重新声明它们-请参阅
还有很多其他的页面

但是:如果你想实现你自己的新事件,你必须这样做:

   ...

    private

    fNewEvent:TNotifyEvent;

    procedure setNewEvent(notify:TNotifyEvent);
    function  getNewEvent:TNotifyEvent;

    procedure DoOnNewEvent;


    ....

    published 

    property OnNewEvent:TNotifyEvent read getNewEvent write setNewEvent;
i、 e.-您需要实现方法类型的属性,如内置于Delphi中的
TNotifyEvent
。如果需要,您也可以创建自己的。如果您想在IDE中像其他Delphi组件的事件一样查看您的事件,则必须将其声明为
published

然后:在“新组件实现”部分中,执行以下操作:

procedure TMyclass.DoOnNewEvent;
begin

  if assigned (fNewEvent) then
   begin
   ....doStuff... 
      fNewEvent(self);
   end;

end;
当要控制的事件在代码中“发生”时,调用
DoOnNewEvent
,这样分配给
fNewEvent
的函数将在代码中的该点被调用。(这通常被称为
回调
——当模块a中的某个“发生”时,它会回调到模块B,让它知道它发生了,等等。)

如果您想定义新的GUI行为,您必须检查您感兴趣的控件,并了解如何捕获它们的实际“物理”事件,即滚动条何时滚动,鼠标何时单击,以及何时调用
DoOnNewEvent
方法。(这通常涉及检查进入应用程序的Windows消息、“消息破解”等-这些消息通知应用程序“外部世界”中发生的情况。)

在使用者类中,例如,在放置滚动框的主窗体中,一旦成功发布新事件,您将在IDE中的新组件上看到您的事件,并在使用者类中分配它并定义您想要它的行为,就像IDE中的任何其他事件一样

查看一个简单组件的VCL源代码,更好地了解它的外观


但是:只有当您确实需要自己的新发布的事件时,才可以这样做,因为覆盖父事件不足以满足您的需要。

用于
t控件的
事件处理程序声明为
受保护的
动态的
。在派生类中使用
override
指令重新声明它们-请参阅
还有很多其他的页面

但是:如果你想实现你自己的新事件,你必须这样做:

   ...

    private

    fNewEvent:TNotifyEvent;

    procedure setNewEvent(notify:TNotifyEvent);
    function  getNewEvent:TNotifyEvent;

    procedure DoOnNewEvent;


    ....

    published 

    property OnNewEvent:TNotifyEvent read getNewEvent write setNewEvent;
i、 e.-您需要实现方法类型的属性,如内置于Delphi中的
TNotifyEvent
。如果需要,您也可以创建自己的。如果您想在IDE中像其他Delphi组件的事件一样查看您的事件,则必须将其声明为
published

然后:在“新组件实现”部分中,执行以下操作:

procedure TMyclass.DoOnNewEvent;
begin

  if assigned (fNewEvent) then
   begin
   ....doStuff... 
      fNewEvent(self);
   end;

end;
当要控制的事件在代码中“发生”时,调用
DoOnNewEvent
,这样分配给
fNewEvent
的函数将在代码中的该点被调用。(这通常被称为
回调
——当模块a中的某个“发生”时,它会回调到模块B,让它知道它发生了,等等。)

如果您想定义新的GUI行为,您必须检查您感兴趣的控件,并了解如何捕获它们的实际“物理”事件,即滚动条何时滚动,鼠标何时单击,以及何时调用
DoOnNewEvent
方法。(这通常涉及检查进入应用程序的Windows消息、“消息破解”等-这些消息通知应用程序“外部世界”中发生的情况。)

在使用者类中,例如,在放置滚动框的主窗体中,一旦成功发布新事件,您将在IDE中的新组件上看到您的事件,并在使用者类中分配它并定义您想要它的行为,就像IDE中的任何其他事件一样

查看一个简单组件的VCL源代码,更好地了解它的外观


但是:只有当您确实需要自己的新发布的事件时,才可以这样做,因为覆盖父事件不足以满足您的需要。

用于
t控件的
事件处理程序声明为
受保护的
动态的
。在派生类中使用
override
指令重新声明它们-请参阅
还有很多其他的页面

但是:如果你想实现你自己的新事件,你必须这样做:

   ...

    private

    fNewEvent:TNotifyEvent;

    procedure setNewEvent(notify:TNotifyEvent);
    function  getNewEvent:TNotifyEvent;

    procedure DoOnNewEvent;


    ....

    published 

    property OnNewEvent:TNotifyEvent read getNewEvent write setNewEvent;
i、 e.-您需要实现方法类型的属性,如内置于Delphi中的
TNotifyEvent
。如果需要,您也可以创建自己的。如果您想在IDE中像其他Delphi组件的事件一样查看您的事件,则必须将其声明为
published

然后:在“新组件实现”部分中,执行以下操作:

procedure TMyclass.DoOnNewEvent;
begin

  if assigned (fNewEvent) then
   begin
   ....doStuff... 
      fNewEvent(self);
   end;

end;
当要控制的事件在代码中“发生”时,调用
DoOnNewEvent
,这样分配给
fNewEvent
的函数将在代码中的该点被调用。(这通常被称为
回调
——当模块a中的某个“发生”时,它会回调到模块B,让它知道它发生了,等等。)

如果您想定义新的GUI行为,您必须检查您感兴趣的控件,并了解如何捕获它们的实际“物理”事件,即滚动条何时滚动,鼠标何时单击