[Lazarus] TControl.Click?

Martin lazarus at mfriebe.de
Sat Oct 1 15:03:38 CEST 2011


On 01/10/2011 09:05, Mattias Gaertner wrote:
> On Sat, 01 Oct 2011 08:39:42 +0100
> Martin<lazarus at mfriebe.de>  wrote:
>
>> On 01/10/2011 07:53, Mattias Gaertner wrote:
>>> On Sat, 01 Oct 2011 03:04:56 +0200
>>> Hans-Peter Diettrich<DrDiettrich1 at aol.com>   wrote:
>>>
>>>> I don't understand the logic behind TControl.Click:
>>>>
>>>> procedure TControl.Click;
>>>> begin
>>>>      //DebugLn(['TControl.Click ',DbgSName(Self)]);
>>>>      if (not (csDesigning in ComponentState)) and (ActionLink<>   nil) and
>>>>         ((Action=nil) or (@FOnClick<>   @Action.OnExecute) or
>>>> Assigned(FOnClick)) then
>>>>        ActionLink.Execute(Self)
>>>>      else
>>>>      if Assigned(FOnClick) then
>>>>        FOnClick(Self);
>>>> end;
>>>>
>>>>
>> Maybe I overlook something, but
>> @FOnClick is the address of the variable holding the method reference
>> (or nil)
>> so is @Action.OnExecute
>>
>> So when can they ever be equal?
> You are right.
...
> I added a CompareMem.
>> Also is that supposed to be a shortcut, saving the call, or is that
>> indeed supposed to modify behaviour?
> Good question.
> I guess it would be enough to check (not (csDesigning in
> ComponentState)) and (ActionLink<>  nil).
>
> Maybe the Delphi docs have an answer.
>

further more:

ActionLink.Execute is virtual

So comparing with the OnExecute method pointer is at the very least 
insufficient.

If ActionLink.Execute  is overridden, it could call/do anything.

I would suggest to drop that check entirely


SVN Blame shows that it's been there for a long time, and always had the 
@FOnClick => so it never triggered in the past, and there never was a 
bug, while it did not trigger.






More information about the Lazarus mailing list