Тема: Визуальный интерфейс IUP LUA в QUIK
Здесь рассмотрю подключение и использование еще одной библиоеки визуального интерфейса для LUA - это библиотека iup и "прослойка" к ней iupLUA.
Вначале установим библиотеку, чтобы ей можно было пользоваться.
Для этого идем сюда [url]http://sourceforge.net/projects/iup/files/3.7/Tools%20Executables/[/url] и качаем файл iup-3.7_Win32_bin.zip.
Кроме этого есть смысл зайти вот сюда [url]http://sourceforge.net/projects/iup/files/3.7/Docs%20and%20Sources/[/url] и скачать документацию в удобном для вас формате (т.е. файлы, содержащие в названии "Docs").
Установка
Распаковываем архив iup-3.7_Win32_bin.zip.
Переходим в папку, куда распакован архив, там заходим в Lua5.1 и копируем в папку с установленным терминалом QUIK три файла:
iup.dll
iuplua51.dll
lua5.1.dll
Последний файл колпировать только в том случае если вы его еще не устанавливали с другой библиотекой.
Возможно, если у вас не установлен соотв. run-time, еще необходимо будет скопировать из папки Lua5.1 \ Microsoft.VC80.CRT все три файла с расширением dll тоже с папку в QUIK, но это можно сделать позже, только если возникнет необходимость.
Простой скрипт с использованием iupLUA
Создадим в текстовом редакторе новый файл, назовем его, например, iup-test-1.lua. Вначале подключим библиотеку iupLUA. Сделать это можно двумя способами:
package.cpath = package.cpath .. ";" .. getWorkingFolder() .. "\\?51.dll"
require( "iuplua" )
либо так:
assert(package.loadlib(getWorkingFolder() .. "\\iuplua51.dll", "luaopen_iuplua"))()
После чего добавим простой текст создания диалогового окна:
dlg = iup.dialog
{
iup.vbox
{
iup.label {title="Test iupLUA in QUIK"},
iup.button{title="Button Very Long Text"},
iup.button{title="short", expand="HORIZONTAL"},
iup.button{title="Mid Button", expand="HORIZONTAL"}
}
;title="IupDialog", font="Helvetica, Bold 14"
}
dlg:show()
iup.MainLoop()
Очень радует то, что [url=https://quik2dde.ru/viewtopic.php?id=20]в отличии от wxLUA[/url] при повторном вызове скрипта, использующего рассматриваемую библиотеку iupLUA, не возникает каких-либо проблем. Значит уже имеет смысл смотреть/разбираться дальше.
Впрочем, как обычно не все так радужно. При использовании приведенного выше скрипта принципиальные проблемы остаются теми же, что и с другими подобными фреймворками: при запуске скрипт полностью останавливается в iup.MainLoop() и дальше не идет, пока не будет закрыто диалоговое окно. Ну так вот оно сделано, и в общем-то понятно почему. Разумеется, это нарушает нормальную работу терминала QUIK, не отображает статус запущенности скрипта - ну и т.д. Наверняка можно наткнуться на разные проблемы и в работе самого торгового терминала (как там с горячими клавишами при запущенном скрипте? удается ли запустить еще скрипты?).
Чтобы избавиться от указанных проблем с остановкой скрипта в методе iup.MainLoop(), можно весь этот текст перенести в main(), тогда в общем-то видимые проблемы исчезнут полностью вообще все, но лишь до тех пор, пока мы не начнем как-то изменять содержимое элементов интерфейса из обработчиков событий. А проблемы, разумеется, сразу возникнут, т.к. main() выполняется в отдельном потоке; соответственно только кодом, вызываемым из main() можно модифицировать какие-либо элементы на созданных диалогах. Что, конечно, достаточно грустно, потому что хотелось бы отображать какие-то данные в процессе работы скрипта, иначе зачем нужны все эти диалоги и окошки.