[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