2

如果我实例化一个弹出按钮,我可以通过选择其中一个选项或单击其他位置来关闭它。有没有一种好方法可以从脚本中消除它?我尝试设置 menuHistory,但似乎没有任何效果。

4

5 回答 5

6

标记 - 如果您在显示弹出菜单时检查 openStacks 的第一行是否为空?我认为是这样,然后你可以这样测试。

于 2013-03-14T12:50:30.800 回答
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
于 2013-03-13T00:32:52.977 回答
1

您可能需要使用在suspendStack 上关闭的调色板堆栈来伪造您的弹出菜单。这样就不会涉及阻塞,您可以随时关闭它。在打开调色板后,您需要弄乱我认为的字段焦点,以便它仍然具有焦点。

于 2013-03-12T20:08:28.217 回答
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

弹出窗口似乎是模态的,并阻止了按钮脚本中的定时例程。我认为 Monte 伪造弹出窗口的想法可能是一个好主意;)

于 2013-03-12T20:57:34.743 回答
0

您无法通过脚本访问已经打开的菜单。但是,在 Windows 上,如果您在 mouseDown 处理程序中使用弹出命令打开弹出菜单,则 mouseDown 处理程序将立即运行直到结束。如果您使用堆栈面板而不是常规弹出菜单,则可以通过脚本关闭堆栈面板(我没有尝试过)。我认为这在 Mac OS X 上是不可能的,因为菜单会阻止任何当前正在运行的脚本,直到菜单关闭。

于 2013-03-12T19:50:44.147 回答