2013-03-12 3 views
2

Если я создаю экземпляр кнопки всплывающего окна, я могу отклонить его, выбрав один из параметров или щелкнув в другом месте. Есть ли хороший способ отклонить его из сценария? Я попробовал установить menuHistory, но это, похоже, не имеет никакого эффекта.LiveCode: как удалить всплывающее окно

ответ

2

Отвечая на мой собственный вопрос:

я не нашел хороший способ, чтобы определить, будет ли отображаться пока кнопка всплывающего меню - ни один из обычных проверок свойств не работает. Но я уклонился вопрос таким образом:

в моем обработчике 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 
+0

Вы уверены, что не имеете в виду rawKeyDown? RawKeyUp не запускается колесом прокрутки в LC 5.5.4, Windows 8. Когда всплывающее меню открыто, колесо прокрутки не вызывает никаких сообщений вообще. – Mark

+0

Да, конечно, именно то, что я имел в виду. Спасибо, слишком волнуйтесь, решив проблему набрать прямо. Колесо прокрутки запускает сообщения rawKeyDown в базовом поле, когда всплывающее меню открыто. Не знаю о win8, но он работает в xp, linux и osx. – mwieder

0

Доступ к уже открытым меню по сценарию недоступен. Однако в Windows, если вы откроете всплывающее меню с помощью команды popup в обработчике mouseDown, обработчик mouseDown будет запускаться до конца мгновенно. Если вы используете панель стека вместо обычного всплывающего меню, вы можете закрыть панель стека по сценарию (я этого не пробовал). Я не думаю, что это возможно в Mac OS X, потому что меню блокирует все текущие сценарии, пока меню не закрывается.

+0

Спасибо. Я не пытаюсь открыть открытые меню. Ситуация заключается в том, что пользователь всплывает меню, и мне хотелось бы, чтобы всплывающее окно исчезло, если прокрутка мыши прокручивает текст под ним. И (как вы догадались), это должно быть кросс-платформенным. – mwieder

+0

Закрытие меню также является способом доступа к нему. Теоретически, вы сделали бы это по сценарию, что невозможно с меню, но возможно с панелью стека (аналогично идее Монте). – Mark

1

Возможно, вам нужно подделать всплывающее меню с палитрой, который закрывается на suspendStack. Таким образом, блокировка не задействована, и вы можете закрыть ее, когда захотите. Вам нужно будет возиться с фокусом поля, которое я думаю, открыв палитру, чтобы она все еще имела фокус.

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 

Всплывающее окно, как представляется, является модальным и блокирует синхронизированную процедуру в сценарии кнопок. Я думаю, что идея Монта в подделке всплывающего окна может быть хорошей;)

+0

Хммм. Всплывающая кнопка, которую у меня есть, кажется, не блокирует. События с прокруткой мыши передаются в базовое поле и обрабатываются без проблем.Просто всплывающее окно остается на экране, а затем, конечно, оно не в том месте, поскольку оно не прокручивалось с данными поля. – mwieder

+1

Я попытался использовать колесо прокрутки для прокрутки текста в поле прокрутки, когда всплывающее меню было открыто. Это не сработало. Меню блокирует события прокрутки. (В Windows 8). – Mark

6

Марк - если вы проверяете openStacks первая строка пуста, пока отображается всплывающее меню? Я думаю, что это так, и тогда вы можете проверить это.

+0

Тревор - блестящий! Это был недостающий ключ. Поэтому в моем обработчике rawKeyDown я проверяю коды ключей scrollwheel, а затем [код], если строка 1 openStacks пуста отправляет «menuPick» на кнопку «PluginMenu», если [код] – mwieder