Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Такая вот передо мной задача. Как реализовать в необок следующее: если кнопка нажата то происходит одно действие а если не нажата то другое. То есть нажал кнопку выполнился первый код, отпустил кнопку второй код, нажал снова опять выполнился первый код, отпустил, снова второй........
IfEx "кнопка нажата" ....что то происходит.... Else ....что то другое происходит EndIf
Ну почему мы поиском не хотим пользоваться? Читай тут. Вот когда уже не найдешь что нужно, тогда пиши. Помню этот вопрос обсуждался, И НЕ ОДИН РАЗ. Так что тем несколько должно быть. И не надо жирным выделять , и так все понятно. Не хочешь читать хелп?
Я читал я там все и не раз, не одного решения нормального не кто не предложил и в плагине про который там говорили подобной функции нет... Вот думал по прошествии времени что новенькое появилось, чтоб кто нибудь что посоветовал...
любые состояния клавиш мыши (наведение/отведение, нажатие/отпускание, прокручивание) обрабатываются в мониторе мыши плагина, и эти события доступны для всех обьектов. Достаточно определить хэндл (универсальный идентификатор обьекта) и указать процедуры с кодом, выполняющимся при нужных состояниях кнопок мыши для этого обьекта.
ваш пример, мониторинг отпускания левой кнопки мыши (LBU) для кнопки PushButton92:
.Активация монитора мыши (при старте проекта или где-то еще...) zmSetMouseMonitor "Local" "PB92_MouseActions" "True" zmConfigMouseMonitor "GetInfo" "True" zmConfigMouseMonitor "PlayAction" "True" .Получение хэндла нужной кнопки GetObjectHandle "PushButton92" "[Button92_Handle]"
Теперь создаем процедуру PB92_MouseActions, где обрабатываем состояние LBU:
:PB92_MouseActions .Если полученный хэндл кнопки совпадает с хэндлом обьекта под мышкой, значит она .находится на нужной нам кнопке PushButton92 If "[Button92_Handle]" "=" "[zmMouseWindowHandle]" .Если состояние кнопки LBU, то выводим сообщение If "[zmMouseCode]" "=" "zmLBU" AlertBox "Кнопка PushButton92" "Левая кнопка отпущена" EndIf endif Return
аналогично можете добавить условия в код и для нажатия лкм, хотя его можно написать сразу в кнопке.
Это может показаться сложным, но это универсальный механизм работы с обьектами, увязанный на их идентификаторах, с их помощью можно контролировать события любого обьекта. А можно и не проверять хэндл, тогда события будут глобальными для всего проекта, а в режиме монитора мыши "Global" и для всей системы (на win7 плохо работает пока...)
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
то есть, наоборот, в моем примере нужно мониторить нажатие кнопки, а не отпускание. Отпускание выполняется в самой кнопке, попутал... Как задавать вопросы
Спасибо DEMBEL, Peter, буду пытаться щас сделать чтонть.... Хотя меня интересует вариант срабатывание какого либо действия от нажатия или отпускания кнопки на клавиатуре. Думал реализовать через кнопку задав на нее горячую клавишу... Но кнопка пр удержани клавиши на клавиатуре работает словно ее каждую секунду нажимают и отпускают это кстати я понял по примеру Peter, А нет ни какого плагина посредством которого можно задать определенное действие именно на кнопки клавиатуры....?
Добавлено (04 Март 2011, 19:29) --------------------------------------------- Я просто решил написать игрушку что то вроде аналога русской рыбалки. Сделал заброс поплавка, поклевку, подсечку, движение попловка после подсечки, теперь необходимо реализовать вытаскивание рыбы. Для чего мне и требуется обработка действия при отпущенной кнопки на клаве. То есть пока нажата кнопка поплавок притягивается к берегу а при отпущенной опять плывет в даль пруда...
делали что-то такое, но не в таком виде как вам нужно. вам лучше Peter прояснит, когда он делал плаг его просили сделать монитор и для клавиатуры (аналогично мыши), это возможно, но это чревато изготовлением кейлоггеров и проблемами с антивирусным ПО, как для вашего приложения, так и для необук в целом (достаточно раз засветиться в базах а/в благодаря какому-то малолетнему идиоту сделавшему кейлоггер, сигнатуры neobook потом будут гулять везде...). Думаю это не будет реализовано, то что вы хотите выходит за разумные рамки необходимости. Есть бесплатный плаг, что там есть это максимум для клавиатуры.
Quote (anton68)
пр удержани клавиши на клавиатуре работает словно ее каждую секунду нажимают и отпускают
естественно, при зажатии клавиши она начинает многократно вводить символ... частота ввода настраивается в свойствах клавиатуры в системе. Как задавать вопросы
Кстати движение поплавка задал следующим кодом, посмотрите может есть более грамотный вариант:
Code
.получаю место расположение поплавка GetObjectInfo "float_1" "Left" "[popX]" GetObjectInfo "float_1" "Top" "[popY]" .задаю цикл для движения поплавка Loop "1" "100000" "[cikl]" :ranXY .определяю случайные числа для координат движения Random "990" "[ranX]" Random "550" "[ranY]" . так как вода на картинке имеет неровный вид высчитываю координаты движения по оси X для сравнения потом с координатами по оси Y чтобы поплавок не уплыл за пределы воды на землю Math "[ranX]/1,3" "0" "[ranX1]" .если полученные случайные числа находиться в пределах воды IfEx "[ranX]>25 and [ranX]<990 and [ranY]>260 and [r.anY]<550 and [ranX1]>[ranY]" .выполняю движения поплавка по заданным координатам MoveObjectAlongPath "float_1" "[ranX],[ranY]" "50" "Wait+Center" "" .если случайные числа находятся за пределами воды Else .формирую случайные числа снова GotoLine ":ranXY" EndIf .повторяю цикл EndLoop
Вроде бы код работает но что то меня в нем смущает, наверно то что я пока не знаю как мне его связать с кодом вываживания рыбы на берег, потому что не знаю как реализовать действие на нажатую и отжатую кнопку клавиатуры, и еще наверно то что поплавок движется по всему пруду а рыба должна все таки наверно уплывать от берега к противоположному а не *** во все стороны..
Кто что посоветует?
[Нарушение правил п.II-2]: не надо так откровенно это делать //DEMBEL
Сообщение отредактировано DEMBEL - Пт, 04 Марта 2011, 19:53
Как раз про нажатие и отпускание кнопки в той теме что я указал, есть решение.
Code
Math "[Кнопка]+1" "0" "[Кнопка]" If "[Кнопка]" "=" "1" GoSub "Vvod_Texta" Math "[Кнопка]-1" "0" "[Кнопка]" Else Math "[Кнопка]-1" "0" "[Кнопка]" EndIf
Этот код работает при нажатиии кнопки. Vvod_Text это то действие которое должно происходить когда вы нажимаете и удерживаете кнопку. Или Math "[Кнопка]-1" "0" "[Кнопка]", после этого ввести подпрограмму, и она сработает когда кнопка будет отпущена.
Читать надо внимательно. Там кстати есть еще один пример, на котором было принято у меня это решение.
Спасибо mishem, но я всетаки последую совету DEMBEL, и увяжу код на нажатие правой кнопки мыши. Для меня это будит самый оптимальный вариант. Огромное спасибо за идею DEMBEL,
А по поводу кода движения поплавка нет не каких пожеланий мне?
А по поводу кода движения поплавка нет не каких пожеланий мне?
ну... может и есть, сам код написан правильно, а насчет его логики неизвестно как там у вас что работает, исходника нет... конечно, цикл на 100000 оборотов смущает, обычно то что вы хотели делается иначе, может тогда вам поможет While/WhileEx ? Почему именно 100000, может вы хотели увязать цикл с каким-то событием? Если да, то есть while, если нет, то такое событие можно организовать... циклы на тысячу, миллион это непродуктивная глупость, есть другие инструменты - внимательно изучите логику команд While/WhileEx и обьекта Timer (таймер), возможно они вам помогут. Как задавать вопросы
Может быть мониторинг нажатий клавиш можно сделать так (?) :
Помещаем поле ввода за пределы видимости. Переменной этого поля ввода назначаем переменную буфера обмена. Мониторим буфер обмена плагином Петра (появился такой-то символ, значит нажата такая-то клавиша, следовательно делаем то-то...)
для этого еще нужно чтобы фокус ввода всегда оставался на этом обьекте "поле ввода", значит придется еще мониторить фокус в таймере и принудительно возвращать его в поле ввода. Это может быть приемлемо только в ограниченных ситуациях (ведь тогда невозможно будет к примеру пользоваться другими, видимыми полями ввода и пр.), но как вариант возможен...
да, логично... а еще справку к плагину дописать, а то думаю многие и не подозревают о всех его возможностях... ну или заглавный пост темы подробнее описать, и обновить бы его тоже надо.