День добрый! Скажите, есть ли возможность вызвать окно с надписью и кнопками Да Нет и обрабатывать его результаты? Никогда этим не занимался, как называется и где искать даже не знаю.
Михаил, пока не получилось подключить, гуглю как это делается, но нашел ветку Понял, что какие то проблемы с луаком возникают и как-то их надо решать. перед тем, как я-таки научусь подключать эту библиотеку, скажите, пожалуйста, не будет ли при использовании вашего примера и этой библиотеки еще проблем, которые тоже надо будет гуглить как решать?)))
Нет там никаких проблем, Виктор, если подходить к написанию скриптов корректно. Берите вот эту версию библиотеки, кладите ее в папку квик.
В статье приведен минимальный код для pure-Lua. Для работы внутри терминала необходимо поместить тот код внутрь функции main() безо всяких циклов.
Инициализация библиотеки должна идти в потоке скрипта. Чтобы избежать проблем с остановкой скрипта по кнопке "остановить", нужно просто предусмотреть финализацию по сигналу onstop. Финализация должна работать в потоке скрипта.
Да, таки делал, в майн без циклов. Теперь с вашей библиотекой заработало Раньше качал с инета целую папку, там длл-ки не было. онстоп есть. Значит. проблем не будет. а у вас на форуме есть разбор других возможностей этой библиотеки? И её нужно только подключить и все? Выходить или отключать её не надо? Будет работать параллельно в нескольких скриптах? Извините, за столько вопросов, ухватился за возможность существенно сократить время поисков. Буду признателен за ответы.
Какой то ахтунг) из примера вынул require "luacom" и переставил его выше майна. Проверял как работает. Выскочила ошибка. Вернул обратно, сохранил, переподключил скрипт, и не работает! Как так то? ошибка вот эта: ***\test2.lua:11: attempt to index global 'sh' (a nil value)
Вообще-то создать окно с надписью и кнопками Да Нет и обрабатывать его результаты можно и стандартными средствами QLua (работа с экранными таблицами). Придется написать побольше кода, будет выглядеть не так красиво, но зато не нужно подключать никакие внешние библиотеки.
Михаил, по финализации я не уточнил. Кроме того, что ней необходимо указать условия выхода из цикла майн, нужно еще что-то в контексте использования луаком? Может я не вышел коректно и потому все перестало работать..
Дмитрий, это Вы про нарисовать таблицу с ячейками да нет, потом отследить движения мыши и обработку? Или есть другой способ? Мне этот вариант показался не то чтобы немыслимым, хоть и реальным, но пока что не могу его принять, по религиозным соображениям) Но конечно, что выяснится, что со сторонними функциями будут глюки, придется идти другим путем.
Viktor MMM пишет: Какой то ахтунг) из примера вынул require "luacom" и переставил его выше майна. Проверял как работает. Выскочила ошибка. Вернул обратно, сохранил, переподключил скрипт, и не работает! Как так то? ошибка вот эта: ***\test2.lua:11: attempt to index global 'sh' (a nil value)
Все, что идет вне функции main(), выполняется в потоке терминала. Таким образом, если require luacom поставить до main, библиотека будет подтянута в потоке терминала. Дергаете вы ее в потоке скрипта и неминуем ахтунг. Ахтунг лечится исправлением скрипта (работа с luacom только в потоке скрипта) и перезагрузкой OS.
понял. Спасибо, Михаил! Эх, перегрузить не могу, данные собираю. А перегрузить именно операционку или можно только квик? Извините за, может, глупый вопрос, вы ведь ответили..
Viktor MMM пишет: понял. Спасибо, Михаил! Эх, перегрузить не могу, данные собираю. А перегрузить именно операционку или можно только квик? Извините за, может, глупый вопрос, вы ведь ответили..
Viktor MMM пишет: Дмитрий, это Вы про нарисовать таблицу с ячейками да нет, потом отследить движения мыши и обработку? Или есть другой способ? Мне этот вариант показался не то чтобы немыслимым, хоть и реальным, но пока что не могу его принять, по религиозным соображениям) Но конечно, что выяснится, что со сторонними функциями будут глюки, придется идти другим путем.
Да, именно про таблицу с ячейками и отслеживание мыши. Если поковыряться, то можно даже красиво сделать. И не только кнопки Да/Нет, но и всякие чекбоксы и т.п. Если видели интерфейс Far, то он ведь фактически так же выглядит - все кнопки и т.п. из обычных текстовых символов. Зато не надо думать о побочных эффектах использования сторонних библиотек.
фаром пользуюсь с удовольствием) ностальгия))) А вообще, конечно, интересно. Если и чекбоксы есть.. С этим буду разбираться когда время свободное девать некуда будет. Сейчас решал локальную задачу, но в будущем точно интерфейс не помешает Если б еще со скрипта можно было подгружать и запускать другие скрипты, то очень бы поразбирался. Но, подозреваю, такой возможности нет. Спасибо!
Да, если у Вас есть пример красивого такого окна с чекбоксами, кнопками и тд, хотелось бы увидиеть. Не код, конечно, просить стесняюсь)), а хотяб скрины или лучше видео)) Чтобы понять стоит ли геомор свеч)
При желании можно также с помощью тех же самых средств QLua создать поля для ввода и редактирования строк (даже с мигающим внутри такого поля "курсором"). Но вообще средства для создания интерфейсов программ в QLua довольно примитивные, требуют немало времени и усилий от программиста, поэтому тут уже неоднократно звучали просьбы клиентов к разработчикам Quik о развитии этих средств.
То-ли пропало сообщение, то-ли не отправил, повторю. Понял, Дмитрий, спасибо за ответ. Дейсвительно интересно. Понравился чекбокс [x] )) Всегда можно найти выход из ситуации)) Другие скрипты запускать из скрипта есть возможность, не знаете?
dofile не запускает новый скрипт. dofile вставляет в текущий скрипт текст из указанного файла. Таким образом можно, в частности, переопределить некоторые функции )))
Ну не то чтобы обманул... Просто не понял, что именно хотел Viktor MMM Конечно, совершенно самостоятельный скрипт, содержащий функцию main(), так не получится запустить. Но насчет того, что dofile просто вставляет в текущий скрипт текст из указанного файла, можно поспорить. Согласно официальной документации функция dofile открывает указанный файл и выполняет его содержимое (хотя конечный итог получается практически такой же, как при вставке текста):
Цитата
dofile ([filename]) Opens the named file and executes its contents as a Lua chunk. When called without arguments, dofile executes the contents of the standard input (stdin). Returns all values returned by the chunk. In case of errors, dofile propagates the error to its caller (that is, dofile does not run in protected mode).
Понял. Я так то знал что дуфайл его подгружает в скрипт в то место, где дуфайл прописан. Потом, если не ошибаюсь, интерпретатор все в куче и обрабатывает. Но никогда не пробовал мэйн через него загнать, думал, вдруг получится?
Почитал еще про библиотеки контролов для окон-интерфейсов. Понял, что при неумелом использовании они крашат квик. Так что буду смотреть в сторону фара). Пусть криво и убого, зато надежно. Зачем чужое, если есть своё, родное)
Дмитрий, можете намекнуть на способ ввода в ячейку с клавиатуры? Готовый пример кода как-то стесняюсь спросить.. Не пойму принцип построения. Например пришел дабл клик. Выделить обозначить ячейку можно. Дальше что, зацикливать внутри события и ловить клавиши, а выходить из цикла при нажатии энтера? Но это какая - то ерунда. Циклить не желательно внутри колбэка. Что то я не понимаю. Подскажите, пожалуйста, или натолкните на верное решение, буду признателен.
Зацикливать внутри коллбэка ничего не нужно. Каждое новое нажатие клавиши приводит у новому вызову коллбэка, внутри которого это нажатие обрабатывается. Просто после начала редактирования текста в ячейке нужно установить значение какой-то переменной-флага в true, тогда при очередном вызове коллбэка он будет знать, что сейчас работает режим ввода текста и нужно добавить новый символ к строке и т.п. После нажатия Enter флаг ставите = false.
Вообще-то прописывать в скрипте коды всех клавиш нет необходимости, это нужно только для управляющих клавиш. Для всех остальных (алфавитно-цифровых) можно использовать простое преобразование кода клавиши в символ, например, так:
Мне нужны были только цифры, а нампад, например, преобразовывался в другие символы. Пришлось править.
Код
if par2 > 95 and par2 <106 then --цифры с нампада
if par2 == 96 then curstring = curstring.."0" end
if par2 == 97 then curstring = curstring.."1" end
if par2 == 98 then curstring = curstring.."2" end
if par2 == 99 then curstring = curstring.."3" end
if par2 == 100 then curstring = curstring.."4" end
if par2 == 101 then curstring = curstring.."5" end
if par2 == 102 then curstring = curstring.."6" end
if par2 == 103 then curstring = curstring.."7" end
if par2 == 104 then curstring = curstring.."8" end
if par2 == 105 then curstring = curstring.."9" end
...
end