ポップアップ ボタンをインスタンス化すると、オプションの 1 つを選択するか、別の場所をクリックすることで閉じることができます。スクリプトからそれを却下する良い方法はありますか? menuHistory を設定してみましたが、効果がないようです。
5 に答える
マーク - ポップアップ メニューが表示されているときに、openStacks の最初の行が空であることを確認した場合は? 私はそれだと思うし、そのようにテストすることができます。
私自身の質問に答える:
ポップアップ メニュー ボタンが表示されているかどうかを判断する適切な方法をまだ見つけていません。通常のプロパティ チェックはどれも機能していないようです。しかし、私はこのように問題を回避しました:
私のスクロールホイールハンドラーで私は
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: 前述のように、「rawKeyUp」ではなく「rawKeyDown」にする必要があります。Trevor が述べたように、openStacks の 1 行目を確認すると、さらに改善されます。
if line 1 of the openStacks is empty then
dispatch "menuPick" to button "PluginMenu"
end if
suspendStack で閉じるパレット スタックでポップアップ メニューを偽造する必要があるかもしれません。そうすれば、ブロックは発生せず、いつでも閉じることができます。パレットを開いた後、フィールドのフォーカスをいじる必要があると思いますので、まだフォーカスがあります。
次のスクリプトを含むボタンをクリックしてから、ポップアップボタンをクリックしてみました。
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
ポップアップはモーダルのようで、ボタン スクリプトの時間指定ルーチンをブロックします。ポップアップを偽造するモンテのアイデアは良いものかもしれないと思っています;)
スクリプトで既に開いているメニューにアクセスすることはできません。ただし、Windows では、mouseDown ハンドラーで popup コマンドを使用してポップアップ メニューを開くと、mouseDown ハンドラーが即座に最後まで実行されます。通常のポップアップ メニューの代わりにスタック パネルを使用すると、スクリプトでスタック パネルを閉じることができる場合があります (これは試していません)。メニューが閉じられるまで現在実行中のスクリプトをメニューがブロックするため、Mac OS X ではこれが可能だとは思いません。