Если я создаю экземпляр кнопки всплывающего окна, я могу отклонить его, выбрав один из параметров или щелкнув в другом месте. Есть ли хороший способ отклонить его из сценария? Я попробовал установить menuHistory, но это, похоже, не имеет никакого эффекта.LiveCode: как удалить всплывающее окно
ответ
Отвечая на мой собственный вопрос:
я не нашел хороший способ, чтобы определить, будет ли отображаться пока кнопка всплывающего меню - ни один из обычных проверок свойств не работает. Но я уклонился вопрос таким образом:
в моем обработчике ScrollWheel я
dispatch "menuPick" to button "PluginMenu"
Тогда в обработчике menuPick кнопки PluginMenu У меня есть
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 только тем временем, когда он находится на экране, но в противном случае эффект заключается только в том, чтобы щелкнуть в конце строки, отменив выбор всплывающего окна, если он сверху.
Редактировать: обработчик scrollwheel, упомянутый выше, находится в обработчике rawKeyUp поля «xyzzy».
Редактировать 2: как уже упоминалось, это должно быть «rawKeyDown» вместо «rawKeyUp». И как Тревор упоминалось, строка 1 из openStacks делает проверку его еще лучше:
if line 1 of the openStacks is empty then
dispatch "menuPick" to button "PluginMenu"
end if
Доступ к уже открытым меню по сценарию недоступен. Однако в Windows, если вы откроете всплывающее меню с помощью команды popup в обработчике mouseDown, обработчик mouseDown будет запускаться до конца мгновенно. Если вы используете панель стека вместо обычного всплывающего меню, вы можете закрыть панель стека по сценарию (я этого не пробовал). Я не думаю, что это возможно в Mac OS X, потому что меню блокирует все текущие сценарии, пока меню не закрывается.
Спасибо. Я не пытаюсь открыть открытые меню. Ситуация заключается в том, что пользователь всплывает меню, и мне хотелось бы, чтобы всплывающее окно исчезло, если прокрутка мыши прокручивает текст под ним. И (как вы догадались), это должно быть кросс-платформенным. – mwieder
Закрытие меню также является способом доступа к нему. Теоретически, вы сделали бы это по сценарию, что невозможно с меню, но возможно с панелью стека (аналогично идее Монте). – Mark
Возможно, вам нужно подделать всплывающее меню с палитрой, который закрывается на 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
Всплывающее окно, как представляется, является модальным и блокирует синхронизированную процедуру в сценарии кнопок. Я думаю, что идея Монта в подделке всплывающего окна может быть хорошей;)
Хммм. Всплывающая кнопка, которую у меня есть, кажется, не блокирует. События с прокруткой мыши передаются в базовое поле и обрабатываются без проблем.Просто всплывающее окно остается на экране, а затем, конечно, оно не в том месте, поскольку оно не прокручивалось с данными поля. – mwieder
Я попытался использовать колесо прокрутки для прокрутки текста в поле прокрутки, когда всплывающее меню было открыто. Это не сработало. Меню блокирует события прокрутки. (В Windows 8). – Mark
Марк - если вы проверяете openStacks первая строка пуста, пока отображается всплывающее меню? Я думаю, что это так, и тогда вы можете проверить это.
Тревор - блестящий! Это был недостающий ключ. Поэтому в моем обработчике rawKeyDown я проверяю коды ключей scrollwheel, а затем [код], если строка 1 openStacks пуста отправляет «menuPick» на кнопку «PluginMenu», если [код] – mwieder
Вы уверены, что не имеете в виду rawKeyDown? RawKeyUp не запускается колесом прокрутки в LC 5.5.4, Windows 8. Когда всплывающее меню открыто, колесо прокрутки не вызывает никаких сообщений вообще. – Mark
Да, конечно, именно то, что я имел в виду. Спасибо, слишком волнуйтесь, решив проблему набрать прямо. Колесо прокрутки запускает сообщения rawKeyDown в базовом поле, когда всплывающее меню открыто. Не знаю о win8, но он работает в xp, linux и osx. – mwieder