如果我实例化一个弹出按钮,我可以通过选择其中一个选项或点击其他地方来解除它。有没有一种好方法可以从脚本中解雇它?我尝试设置menuHistory,但它似乎没有任何效果。
答案 0 :(得分:6)
标记 - 如果在显示弹出菜单时检查openStacks是第一行是否为空?我认为是,然后你可以测试那种方式。
答案 1 :(得分:2)
回答我自己的问题:
我还没有找到确定是否显示弹出菜单按钮的好方法 - 通常的属性检查似乎都不起作用。但我如此回避了这个问题:
在我的滚轮处理程序中
dispatch "menuPick" to button "PluginMenu"
然后在PluginMenu按钮的menuPick处理程序中我有
if pItemName is empty then
lock screen
put word 2 of the selectedline of field "xyzzy" into tLine
select after line tLine of field "xyzzy"
click at the selectedloc
unlock screen
end if
其中pItemName是普通的menuPick参数。 如果我可以确定弹出窗口何时可见,我可以将menuPick调用限制在屏幕上的时间,但是效果只是单击该行的末尾,如果它位于顶部则取消选择弹出窗口。
编辑:上面提到的滚轮处理程序位于字段“xyzzy”的rawKeyUp处理程序中。
编辑2:如上所述,应该是“rawKeyDown”而不是“rawKeyUp”。 正如Trevor所说,检查openStacks的第1行会使它更好:
if line 1 of the openStacks is empty then
dispatch "menuPick" to button "PluginMenu"
end if
答案 2 :(得分:1)
可能需要使用在suspendStack上关闭的调色板堆栈伪造弹出菜单。这样就没有任何阻塞,你可以随时关闭它。在打开调色板后你需要弄乱我认为的领域的焦点,因此它仍然具有焦点。
答案 3 :(得分:1)
我刚尝试点击包含以下脚本的按钮,然后点击弹出按钮。
on mouseUp
set the uActive of me to not the uActive of me
if the uActive of me then send "test" to me in 2000 millisecs
end mouseUp
on test
put the millisecs
if the uActive of me then send "test" to me in 2000 millisecs
end test
弹出窗口似乎是模态的,并阻止按钮脚本中的定时例程。我认为蒙特关于伪造弹出窗口的想法可能是个好主意;)
答案 4 :(得分:0)
您无法通过脚本访问已打开的菜单。但是,在Windows上,如果在mouseDown处理程序中使用popup命令打开弹出菜单,则mouseDown处理程序将立即运行直到结束。如果使用堆栈面板而不是常规弹出菜单,则可以通过脚本关闭堆栈面板(我没有尝试过)。我不认为这在Mac OS X上是可行的,因为菜单会阻止任何当前正在运行的脚本,直到菜单关闭。