1

Тема: Использование wxLua в QUIK

Для создания программ на LUA с графических интерфейсом удобно прикрутить мощную готовую библиотеку [url=http://wxlua.sourceforge.net/]wxLua[/url], которая представляет из себя LUA-обёртку над кросс-платформенной библиотекой [url=http://www.wxwidgets.org]wxWidgets[/url], предназначенной для удобной разработки GUI-интерфейсов, но далеко не только GUI! там и работа с XML, и работа с сетью, в том числе через сокеты - в общем простор открывается просто безграничный.

В частности, один из примеров в руководстве по QUIK LUA как раз содержит screen-shot элемента Grid, сделанного при помощи wxLua библиотеки ( [url=http://forum-archive.quik.ru/forum/lua/96731/96874/#m96874]пруф[/url] ).

Но перед началом использования этой чудо-библиотеки ее необходимо развернуть на своем компьютере. Особые ценители могут скачать исходники данной библиотеки и скомпилировать их под себя, им дальше читать явно смысла нет ) Ну а я далее пошагово опишу как сделать эту библиотеку доступной для своих LUA-скриптов в QUIK.
Установить самую распоследнюю версию мне, признаться, как-то не удалось, не захотела она работать. Так что установил я версию не самую последнюю, впрочем, особо от этого ничего не потеряется, т.к., судя по сайту сообщества поддержки, в последних версиях сделаны лишь минорные правки, багфикс и пересобрано все это последними компиляторами в Ansi и Unicode вариантах. Так что функционально точно ничего не потеряем, тем более, что нам Unicode-вариант и не нужен.
Если кто-то подскажет, как установить и использовать последнюю версию - буду признателен.

1. Скачиваем готовый скомпилированный вариант библиотеки, причем в виде подключаемых dll. Для этого отсюда
[url=http://sourceforge.net/projects/wxlua/files/wxlua/2.8.10.0/]http://sourceforge.net/projects/wxlua/files/wxlua/2.8.10.0/[/url]
скачиваем файл wxLua-2.8.10-MSW-dll.zip (посмотрев 5 секунд на рекламные баннеры  перед собственно скачиванием).

2. Распаковываем этот архив во временной папке и переходим в папку \bin\. Внутри нее лежит куча всяких файликов, из них нам понадобятся все файлы с расширением .dll (таких там 21 штука, включая и файл lua5.1.dll).

3. Crопируем все .dll файлы из папки \bin\ в доступное для наших LUA-скриптов место. Я очень советую скопировать их прямо в каталог, где установлен терминал QUIK (т.е. в одну папку с info.exe, qlua.dll и т.д.): это гарантирует, что библиотека wxLua будет точно доступна всем LUA-скриптам, запускаемым внутри QUIK, где бы ни находились сами эти скрипты. Так будет даже проще переносить сам терминал QUIK при необходимости, не беспокоясь о работоспособности использующих эту библиотеку LUA-скриптов.

Собственно и все. Подключаем библиотеку wxLua в свой скрипт через

require("wx")

и используем. Теперь вся мощь wxLua с нами!

2

Re: Использование wxLua в QUIK

Собственно попробуем сделать что-то, проверим действительно ли с нами wxLua?

Запускаем терминал QUIK, можно даже не подключаться к серверу
Таблицы -> Lua ->Доступные скрипты -> нажимаем "Добавить"

Выбираем папку, куда был распакован архив с wxLua, там переходим в папку \samples\ и выбираем файл grid.wx.lua (я откопировал его в отдельное место).
Эврика! видим замечательный грид! причем окно с гридом можно вытаскивать куда угодно, в том числе и за пределы окна QUIK.

Ладно, закроем это окно "крестиком" и чуть-чуть добавим кода в то место, где заолняются ячейки таблицы сразу после вот этих строчек

grid:SetCellValue(0, 0, "First cell")
grid:SetCellValue(1, 1, "Another cell")
grid:SetCellValue(2, 2, "Yet another cell")
grid:SetCellFont(0, 0, wx.wxFont(10, wx.wxROMAN, wx.wxITALIC, wx.wxNORMAL))
grid:SetCellTextColour(1, 1, wx.wxRED)
grid:SetCellBackgroundColour(2, 2, wx.wxCYAN)

долбавим:

grid:SetCellValue(4, 3, "Special for Quik2Dde")
grid:SetCellBackgroundColour(4, 3, wx.wxCYAN)
grid:SetCellTextColour(4, 3, wx.wxRED)
grid:SetCellFont(4, 3, wx.wxFont(10, wx.wxMODERN, wx.wxDEFAULT, wx.wxBOLD))

плюс в самом конце файла после всего текста припишем:

function main()
-- вставим пустую main()
-- если эту функцию не написать - будет отображена ошибка "attempt to call a nil value"
end

Сохраняем, нажимаем "Запустить"

https://quik2dde.ru/static-img/wx-grid-first-sample.png


Но, не все так хорошо, конечно.
Во-первых, подозрительно скрипт как бы остановлен, однако мы видим окно с гридом, которе еще и функционирует.
Во-вторых, если, не закрывая созданное окно с гридом, сразу закрыть тернминал QUIK, то при его закрытии возникает ошибка "Internal exception happend.".

Так что пока это приложение если слишком несовершенно... будем работать, искать. Любые идеи принимаются.
Но главное, что было? правильно, запустить wxLua!

3

Re: Использование wxLua в QUIK

< reserved >

4

Re: Использование wxLua в QUIK

< reserved >

5

Re: Использование wxLua в QUIK

<reserved >

6 (2013-05-13 09:21:23 отредактировано mysiters)

Re: Использование wxLua в QUIK

не выдержал зарегался аж
Спасибо вам большое и пожалуйста продолжайте все что связаное с GUI и с lua очень интересует
вот с Perl хочу полностью перейти на lua

Подскажите вот такая вот ошибочка
Полностью ваш код переписал  с чем это связано ?

Lua: Error while running chunk
C:\1.lua:3: attempt to index global 'grid' (a nil value)
stack traceback:
    C:\1.lua:3: in main chunk

Lua: Error while running chunk

7

Re: Использование wxLua в QUIK

обратите внимание, что код не полный. Он сделан на основе grid.wx.lua - примера из поставки wx lua. Возьмите этот пример за основу.
подозреваю, вы забыли создать объект grid