D,
> User Drops TButton On Form
OK, in some sort of design mode? or are they a delphi programmer?
> User assigns TButton to MyComponent
So you get a reference to the Button and persist the ref to TButton
> User Runs Application
Yup,
> As app runs up I get a reference to TButton click event
Yup, using the ref to TButton you hook the onclick
> User double clicks the form which causes them to assign a custom method to
> the onclick event for the TButton (This overwrites the MyComponent
> reference I have placed in the notification event)
> User clicks the button - Their custom event fires and MyComponent is none
> the wiser
Solution 1: Also hook the double click event so that you can check your
hook
after the double click
Solution 2: Yuck...but periodically check that you are still hooked (Ugly
but would work)
Solution 3: Request that the user/developer 'reinitialises' your component
after
assigning anything to a TNotifyEvent.
Solution 4: Also hook some other event of the TButton (onEnter, mousemove,
mousedown)
to reinit yuor click hook
HTH
Neven
>
> At 14:02 21/11/2002 +1300, you wrote:
> >D
> >
> >I Don't really understand, You are truing to hook a TNotifyEvent
> >The methods were example of how to use RTTI to hook them...
> >
> >Please Elucidate
> >
> >
> >Neven
> >
> >----- Original Message -----
> >From: "Donovan J. Edye" <[EMAIL PROTECTED]>
> >To: "Multiple recipients of list delphi" <[EMAIL PROTECTED]>
> >Sent: Thursday, November 21, 2002 12:48 PM
> >Subject: Re: [DUG]: [Q] Event Hooking.....
> >
> >
> > > N,
> > >
> > > Thanks. However unless I am still missing something here then this is
> >still
> > > a problem:
> > >
> > > EmbeddedComponent.OnEvent := nil;
> > > TControlLink.Active := TRUE;
> > > EmbeddedComponent..OnEvent := MyEventAssignedAtRunTimeBecauseICan;
> > >
> > > Dont see how MyEventAssignedAtRunTimeBecauseICan would ever be called.
> > >
> > > At 12:32 21/11/2002 +1300, you wrote:
> > > >D
> > > >
> > > >You can you it with RTTI, Hope this helps
> > > >
> > > > FControlEvent: TMethod;
> > > > FNewOnControlEvent: TMethod;
> > > >
> > > >
> > > >procedure TControlLink.SetOnControlEvent;
> > > >begin
> > > > if not (csDesigning in ComponentState) and
> > > > (FControl <> nil) and
> > > > (FEventName <> '') then
> > > > if IsPublishedProp(FControl,FEventName) then
> > > > begin
> > > > FControlEvent := GetMethodProp(FControl,FEventName);
> > > > with FNewOnControlEvent do
> > > > begin
> > > > Code := @TControlLink.OnControlEvent;
> > > > Data := Self;
> > > > end;
> > > > SetMethodProp(FControl,FEventName,FNewOnControlEvent);
> > > > end;
> > > >end;
> > > >
> > > >procedure TControlLink.ResetOnControlEvent;
> > > >begin
> > > > if not (csDesigning in ComponentState) and (FControl <> nil) then
> > > > begin
> > > > FNewOnControlEvent := GetMethodProp(FControl,'OnControlEvent');
> > > > if FNewOnControlEvent.Data = Self then {still pointing at us}
> > > > SetMethodProp(FControl,'OnControlEvent',FControlEvent);
> > > > end;
> > > >end;
> > > >
> > > >procedure TControlLink.OnControlEvent;
> > > >begin
> > > > if not FActive then Exit;
> > > > if FControl <> nil then
> > > > begin
> > > > // do our stuff
> > > > end;
> > > > if Assigned(FControlEvent.Code) then // call the original
> > > > TNotifyEvent(FControlEvent)(TObject(FControl));
> > > >end;
> > > >
> > > >
> > > >----- Original Message -----
> > > >From: "Donovan J. Edye" <[EMAIL PROTECTED]>
> > > >To: "Multiple recipients of list delphi" <[EMAIL PROTECTED]>
> > > >Sent: Thursday, November 21, 2002 11:42 AM
> > > >Subject: [DUG]: [Q] Event Hooking.....
> > > >
> > > >
> > > > > G'Day,
> > > > >
> > > > > I was just curious about some approaches to achieve responding to
the
> > > >event
> > > > > of an embedded component in my component. Clear as mud? An
example:
> > > > >
> > > > > Lets say I have a component MyComponent that has a published
property
> > > > > MyButton : TButton. Now I want to take some action when the user
> >clicks
> > > >the
> > > > > button assigned to MyButton. However any code that they have
assigned
> >to
> > > > > the click event for the button must also be fired.
> > > > >
> > > > > So basically I want to transparently hook the OnClick event. The
only
> >way
> > > >I
> > > > > can think of doing this is by responding to the apropriate CN_*,
CM_*
> > > > > message. Is there another way to do this? If not what messages
should
> >I be
> > > > > looking at responding to?
> > > > >
> > > > >
> > > > >
> > > > > -- Donovan
> > > >
> ----------------------------------------------------------------------
> > > > > Donovan J. Edye [www.edye.wattle.id.au]
> > > > > Namadgi Systems [www.namsys.com.au]
> > > > > Voice: +61 2 6285-3460
> > > > > Fax: +61 2 6285-3459
> > > > > TVisualBasic = Class(None);
> > > > > Heard just before the 'Big Bang': "...Uh Oh...."
> > > >
> ----------------------------------------------------------------------
> > > > > GXExplorer [http://www.gxexplorer.org] Freeware Windows Explorer
> > > > > replacement. Also includes freeware delphi windows explorer
> >components.
> > > >
> ----------------------------------------------------------------------
> > > > >
> > > >
> > >
> >
>---------------------------------------------------------------------------
> > > > New Zealand Delphi Users group - Delphi List -
[EMAIL PROTECTED]
> > > > Website: http://www.delphi.org.nz
> > > >To UnSub, send email to: [EMAIL PROTECTED]
> > > >with body of "unsubscribe delphi"
> > > >Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/
> > >
> > > -- Donovan
> > > ----------------------------------------------------------------------
> > > Donovan J. Edye [www.edye.wattle.id.au]
> > > Namadgi Systems [www.namsys.com.au]
> > > Voice: +61 2 6285-3460
> > > Fax: +61 2 6285-3459
> > > TVisualBasic = Class(None);
> > > Heard just before the 'Big Bang': "...Uh Oh...."
> > > ----------------------------------------------------------------------
> > > GXExplorer [http://www.gxexplorer.org] Freeware Windows Explorer
> > > replacement. Also includes freeware delphi windows explorer
components.
> > > ----------------------------------------------------------------------
> > >
> >
>
>---------------------------------------------------------------------------
> > New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
> > Website: http://www.delphi.org.nz
> >To UnSub, send email to: [EMAIL PROTECTED]
> >with body of "unsubscribe delphi"
> >Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/
>
> -- Donovan
> ----------------------------------------------------------------------
> Donovan J. Edye [www.edye.wattle.id.au]
> Namadgi Systems [www.namsys.com.au]
> Voice: +61 2 6285-3460
> Fax: +61 2 6285-3459
> TVisualBasic = Class(None);
> Heard just before the 'Big Bang': "...Uh Oh...."
> ----------------------------------------------------------------------
> GXExplorer [http://www.gxexplorer.org] Freeware Windows Explorer
> replacement. Also includes freeware delphi windows explorer components.
> ----------------------------------------------------------------------
>
---------------------------------------------------------------------------
New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
Website: http://www.delphi.org.nz
To UnSub, send email to: [EMAIL PROTECTED]
with body of "unsubscribe delphi"
Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/