Hi! I was wondering why...

Code:
type
 TMyEvent = procedure(Sender: TObject) of object;

 TBaseClass = class
 private
  fOnClick: TMyEvent;
 public
  property OnClick: TMyEvent read fOnClick write fOnClick;
 end;

 {$M+}
 TDescentClass = class(TBaseClass)
 private
  fClicked: Boolean;
 public
  constructor Create;
 published
  procedure DoClick(Sender: TObject);
 end;   
 {$M-}

implementation

 
constructor TDescentClass.Create;
begin
 fClicked := False;
 Onclick := DoClick(Self);
end;

procedure TDescentClass.DoClick(Sender: TObject);
begin
 Sender.fClicked := True;
end;
... this doesn't compile!?! It says: [DCC Error] Test.pas(312): E2010 Incompatible types: 'TMyEvent' and 'procedure, untyped pointer or untyped parameter'...

...and colors with red the line where I try to assign published method to object variable.

If I change the Create method like this:
Code:
constructor TDescentClass.Create;
var
 Method: TMethod;
begin
 fClicked := False;
 Method.Data := Pointer(Self);
 Method.Code := MethodAddress('DoClick');
 Onclick := TMyEvent(Method);
end;
Then it compiles fine and method works perfectly!!

Where might be a problem? Why I cannot assign object method to event handler?