Exactly. FWIW, this is my code. The METHOD SET ATTRIBUTES call allows the
injected method to be used as a callback. Methods to be injected begin with an
underscore in the component, which is removed when creating the method in the
host.
Jeremy
METHOD GET NAMES($omNames;"_OM@")
METHOD GET NAMES($hostNames;"OM@";*)
For ($i;1;Size of array($omNames))
$hostName:=Substring($omNames{$i};2)
If (Find in array($hostNames;$hostName)#-1) // already exists,
so see if needs to be updated
METHOD GET MODIFICATION
DATE($omNames{$i};$omDate;$omTime)
METHOD GET MODIFICATION
DATE($hostName;$hostDate;$hostTime;*)
If (($omDate>$hostDate) | (($omDate=$hostDate) &
($omTime>$hostTime)))
METHOD GET CODE($hostName;$code;*)
$hostNameOld:=$hostName+"Old"
METHOD SET CODE($hostNameOld;$code;*)
METHOD GET CODE($omNames{$i};$code)
METHOD SET CODE($hostName;$code;*)
METHOD SET ATTRIBUTE($hostName;Attribute
shared;True;*)
End if
Else
METHOD GET CODE($omNames{$i};$code)
METHOD SET CODE($hostName;$code;*)
METHOD SET ATTRIBUTE($hostName;Attribute shared;True;*)
End if // if method exists
End for
> On 11 Nov 2019, at 15:45, Chip Scheide <[email protected]> wrote:
>
> as a bonus you can update the code in the method(s) you are injecting
> as needs change (or bugs are found and fixed), by simply allowing the
> injection method to overwrite the existing code.
>
> Chip
>
> On Mon, 11 Nov 2019 15:09:34 +0000, Jeremy Roussak wrote:
>> Chip, you read my mind - that is almost exactly what I implemented
>> yesterday afternoon. It was really easy to do and it works a treat.
>>
>> Jeremy
>>
>>> On 11 Nov 2019, at 15:06, Chip Scheide <[email protected]> wrote:
>>>
>>> another option - depending on your view of doing this... is Code
>>> injection.
>>>
>>> At startup of the host (will have to be started at least once
>>> interpretedly)
>>> you copy the code for the event call method into a method in the host.
>>>
>>> it looks something like this (interpreted host and component):
>>> METHOD GET CODE(<method_to_inject>)
>>> METHOD SET CODE(<Source_code>;<Host_New_Method_Name>)
>>>
>>> Alternatively (compiled component and interpreted host):
>>> - At component shut down, write the method(s) to be injected to disk as
>>> text (I use the resources folder)
>>> - at host or component startup read the text files
>>> METHOD SET CODE(<code_from_text_file>;<Host_New_Method_Name>)
>>>
>>> Chip
>>>
>>> On Sun, 10 Nov 2019 18:07:01 +0000, Jeremy Roussak via 4D_Tech wrote:
>>>> I’d like to have a method set by ON EVENT CALL to live in a
>>>> component. It works, in that the method is called on each event, but
>>>> the system variables Modifiers and KeyCode are undefined so testing
>>>> for the event itself is tricky.
>>>>
>>>> I can get round the absence of Modifiers by using Macintosh control
>>>> down, but I’m not sure how I get the keystroke that triggered the
>>>> event.
>>>>
>>>> Is it possible?
>>>>
>>>> Jeremy
>>
> We have done so much, with so little, for so long;
> We are now qualified to anything with nothing <sigh>
> - unknown
**********************************************************************
4D Internet Users Group (4D iNUG)
Archive: http://lists.4d.com/archives.html
Options: https://lists.4d.com/mailman/options/4d_tech
Unsub: mailto:[email protected]
**********************************************************************