我在运行on KeyboardActivated
的堆栈中有一个代码脚本。代码需要活动控件的名称。我可以通过为生成KeyboardActivated的每个控件添加on openfield
代码来实现。但是有一种方法可以让堆栈知道哪个控件处于活动状态会更容易。这可能吗?
答案 0 :(得分:1)
您可以使用前端脚本。要将脚本指定为前脚本,请使用此语法
insert the script of control x into front
您可以使用openField
处理程序:
global gLastOpenedField
on openField
put the long id of the target into gLastOpenedField
pass openField
end openField
前端脚本将捕获所有openField处理程序,并将目标的长id存储到全局变量中。不要忘记将openField
消息传递到下一个级别!
答案 1 :(得分:0)
这就是马克的意思。如果在frontScript中捕获“openField”消息,并且未传递它,则会对其进行处理,但随后将被丢弃。 “pass”命令就是这样做的,沿着层次结构发送它。
你可以反过来思考这个问题。如果“front”中根本没有“openField”处理程序,则消息将正常通过该层次结构级别而不会被捕获(这是正常的方式),然后可以被您提到的那个字段捕获。 / p>
所有处理程序都以这种方式工作。捕获消息时,除非明确传递,否则将对其进行处理和丢弃。解决这种垃圾问题的另一种方法是使用“发送”或“调度”命令,它可以将消息“传递”到任何对象,而不管它在层次结构中的位置。
答案 2 :(得分:0)
你尝试过使用“目标”吗?我从不使用前/后脚本,总是以这种方式对事物进行排序。即:
on KeyboardActivated
put [short] name of the target into MyVar
-- do your stuff