Тема: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения
Здесь обсуждаем визуальную библиотеку QVCLua.
[url=https://quik2dde.ru/viewtopic.php?id=111]Сама библиотека и описание в отдельной теме[/url].
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
QUIK -> DDE → Lua: визуальные библиотеки → Визуальный интерфейс QVCLua: обсуждения, замечания, предложения
Здесь обсуждаем визуальную библиотеку QVCLua.
[url=https://quik2dde.ru/viewtopic.php?id=111]Сама библиотека и описание в отдельной теме[/url].
Да, qvclua получился хорош, swerg, еще раз спасибо!
Мой первый бот на qlua+qvclua )
А можно пример кода? Или здесь используется QLua?
Arhn, немного не понятен ваш вопрос.
Все это "нарисовано" с применением библиотеки QVCLua.
Мне не понятен синтаксис языка
Прошу прощения. Разобрался.
require "qvcl"
VCL = vcl
Проблемка нарисовалась. Крестиком закрываю окно главной формы, окошко закрывается, но обработчик события OnClose не вызывается. Что не так?
mainForm = vcl.Form("mainForm")
mainForm._= { caption="StakanMax", position="poDesigned", OnClose="OnMainFormClose" }
...
function OnMainFormClose(Sender, CloseAction)
message("BYE 2",1);
writeCfgFile("c:\\LUA\\stakan_max.cfg");
OnStop();
end
В старой версии функция-обработчик вызывалась.
Да, новая версия полна сюрпризов, теперь вот так
mainForm = vcl.Form({Name="mainForm", Caption="StakanMax", Position="poDesigned", OnClose=OnMainFormClose })
grid = vcl.StringGrid(mainForm, {Name="grid"})
...
function OnMainFormClose(Sender, CloseAction)
message("BYE 2",1);
writeCfgFile("c:\\LUA\\stakan_max.cfg");
OnStop();
end
Или например вот так, сэкономим на ресурсах (готово к запуску)
local vcl=require "qvcl"
mainForm = vcl.Form({Caption="StakanMax", OnClose=function() message("BYE 2",1) mainForm:Release() vcl=nil end })
mainForm:Show()
function main() repeat sleep(1) until not vcl end
Перепишите вашу программу вот так:
local vcl=require "qvcl"
mainForm = vcl.Form{Caption="StakanMax", OnClose=OnFormClose }
mainForm:Show()
OnFormClose=function() message("BYE 2",1) mainForm:Release() vcl=nil end
function main()
repeat sleep(1)
until not vcl
end
И она перестает завершаться при закрытии окна.
Перепишите вашу программу вот так:
local vcl=require "qvcl" mainForm = vcl.Form{Caption="StakanMax", OnClose=OnFormClose } mainForm:Show() OnFormClose=function() message("BYE 2",1) mainForm:Release() vcl=nil end function main() repeat sleep(1) until not vcl end
И она перестает завершаться при закрытии окна.
Попробуйте перенести обработчик выше определения его вызова, и ваш вариант заработает. Это же просто ссылка. )
local vcl=require "qvcl"
OnFormClose=function() message("BYE 2",1) mainForm:Release() vcl=nil end
mainForm = vcl.Form{Caption="StakanMax", OnClose=OnFormClose }
mainForm:Show()
function main()
repeat sleep(1)
until not vcl
end
Ок, пусть будет так, хотя это не по правилам ))
Еще вопрос. Есть где-нибудь в природе описание всех доступных свойств и методов?
Пробую сейчас нарисовать на новой версии ComboBox и подсунуть ему список для выбора - и ничего подобного. На 0.35 работало.
Всё работает, разница в нюансах
local vcl=require "qvcl"
local OnFormClose = function() message("BYE 2",1) mainForm:Release() vcl=nil end
mainForm = vcl.Form{Caption="StakanMax", OnClose=OnFormClose }
ComboBox = vcl.ComboBox(mainForm, {Name = "ComboBoxx", top=10, left=10, Width=100, Text="Выбрать...",
OnChange=function() message(ComboBox.Text) end, ShowHint=true, Hint="Всплыло вот..."})
for _,i in ipairs({"Текст 1","Текст 2","Текст 3"}) do ComboBox.Items:Add(i) end
mainForm:Show()
function main() repeat sleep(1) until not vcl end
Или сразу задать
local vcl=require "qvcl"
Form=vcl.Form()
ComboBox = vcl.ComboBox(Form,{Text="Выбрать...", Items={"Текст 1","Текст 2"},
OnChange=function() message(ComboBox.Text) end})
Form.Visible=true
function main() repeat sleep(1) until not vcl end
В этом сообщении будет баг-лист (вылет QUIK)
1. Передача nil в значения контролов
2. Пробел в имени Name
3. Попытка записи или чтения из ячейки StringGrid вне заданного диапазона
4. Обращение к ранее (выше по коду) не определенному обработчику
5. Передача на контролы переменных недопустимого типа или значений вне докум. диапазона
6. Попытка повторного запуска скрипта после вылета с неизвестной ошибкой. Иногда поможет "Удалить - Добавить"заново скрипт в "Доступные скрипты", но чаще всего нужно "Удалить", перегрузить Квик, "Добавить", запуск. Причина известная - Квик не отпускает библиотеку и не освобождает память при вылете с неизвестной ошибкой.
...
Всё работает, разница в нюансах )
О какой забавник автор ))
Еще вопрос. Есть где-нибудь в природе описание всех доступных свойств и методов?
s_mike, предлагаю сотрудничество. ) Я вам кину комплект скрипта-образца со всеми доками что нарыл в сети, а вы мне расшифруете некоторые методы и свойства, с которыми я не разобрался (не до изучения delfi пока). Я их буду вносить в скрипт, так и доделаем нормальный мануал для народа. Если захотите и на свой сайт выложите. )
От бразильцев и в этот раз исчерпывающей документации нет. А в той, что есть - косяк на косяке синтаксический в примерах.
Если интересно - киньте мыло в личку.
Отчего же не кинуть - кидайте.
Правда обещать, что я вот так сразу сяду и начну разбираться не могу. По мере надобности - не вопрос.
Ок, понял, я тогда скоро выложу сюда в общий доступ, нужно только юзерфрендли файлопомойку найти, никогда ими не пользовался..
В QUIK 6.16 разработчики по просьбам пользователей сделали сделали жесткую выгрузку библиотек, не беда, просто изменим шаблоны )
local vcl=require "qvcl"
OnFormClose=function() message("BYE") vcl=nil end
mainForm = vcl.Form{Caption="StakanMax", OnClose=OnFormClose }
mainForm:Show()
function main()
while vcl do
sleep (1)
end
sleep(100)
end
[url=http://rghost.ru/download/60480784/bede442533a62167658078261881fdb35687447a/Sample.lua]Пример использования библиотеки[/url]. Положить в корень QUIK, рядом должна быть [url=https://quik2dde.ru/viewtopic.php?id=111]библиотека QVCLua[/url]. Запустить из-под QUIK.
Принтскрины
[url]http://i.gyazo.com/b05a922b607da78c74d03312879f413b.png[/url]
[url]http://i.gyazo.com/ffb3cbc9888140a6f48cb59ff1a63213.png[/url]
[url]http://i.gyazo.com/ff95d85ecdbfd9280f6d98a080d70c76.png[/url]
[url]http://i.gyazo.com/68d425fa623d17b3cd925f185d1d36db.png[/url]
А сам FlashCatcher?
)) Это дельтахеджер, я так понимаю? Какая задержка при обработке транзакций из-за VCLua?
Опционный бот для разных конструкций с дельта-хеджером.
К выводу через VCLua обращается уже после подготовки и отправки транзакции, поэтому задержек нет. Т.е. любой вывод на экран - в самом конце кода и на параллельном потоке.
sam063rus,
я про потоки qlua - основной и main. Если заведете тему типа "Потокобезопасность в qLua" в ветке Lua: учебники, общие вопросы, я с удовольствием поделюсь своей межпоточной моделью.
В целом, да, абсолютно разделить по времени потоки в рамках qlua может быть и не получится, контроллировать хотя бы на этапе проектирования нужно. Я оставил и в рабочем варианте, обратите внимание на этот участок формы:
Слева направо, сверху вниз:
1. Сколько инструментов ушло на вывод в VCLua
2. Сколько открыто позиций
3. Бегунок частоты цикла потока main (оказалось очень информативно визуально, стрелочка бегает)
4. Поступило из колбэков котировок фьючерсов в очередь в main-поток на обработку
5. Поступило из колбэков котировок опционов в очередь в main-поток на обработку
6. Толпа в очереди перед main
7. Толпа в очереди перед vclua
-- А теперь, внимание! )
8. Выключатель вывода в VCLua (во все элементы, кроме упомянутых здесь)
9. Частота вывода в vclua (выводится по таймеру) в секундах
10. Не имеет отношения к нашей теме.
11. RUN - не имеет отношения к нашей теме.
Таким образом достигнут пракически полный межпоточный "онлайн" ), при отключенном выводе в grid и memo - индикатор толпы в очереди всегда ноль. При включенном выводе - раз в три (или сколько зададите таймеру) секунды скопившаяся очередь разгребается примерно за полсекунды. Это много, поэтому - отходим от бота - отключаем вывод в vclua.
Обнаружена также зависимость от мощности видеокарты. Интегр Intel3000 разгребает максимальную толпу в очереди например за 0,5 сек, немощная, но дискретная - за 0.2 сек. Возможно хорошая видеокарта будет разгребать очередь на вывод вовсе "онлайн".
Код своего бота я выкладывать не буду, и не столько потому, что ухлопал на него почти пол-года своей жизни, и не столько потому, что просто выдернуть граф. часть чтобы она сходу самостоятельно заработала - непросто и долго, сколько потому что Вам имеет смысл написать её самому. За день напишите и ещё за неделю отладите баги (а они будут в работе в Квик даже при начальном безупречном синтаксисе VCLua). Поверьте, лучше написать своё.)
К тому же Вы писали на делфи, вам легче в 1000 раз, мой бот - первый опыт на Lua, делфи до сих пор не знаю. ) В пору мне у вас советов спрашивать. )
Добавлю, вся работа с vclua только из основного потока, иначе - вылет Квик.
У меня, ну, почти - вся ), кое-что всё таки отдал в main, проверял экспериментальным путем, до каких пор vclua не подавится, удалось отвоевать вот этот grid, он заполняется из main в режиме реалтайм (если пришла новая котировка) кратно sleep(1). Квант в оси тоже переключен на 1 мсек.
Добрый день. Ждемс описания функционала qvcl.
Заранее благодарен
Добрый день. Ждемс описания функционала qvcl.
Заранее благодарен
Нет его и вряд ли появится. Запускайте пример, задавайте вопросы.
Нет его и вряд ли появится. Запускайте пример, задавайте вопросы.
Повторюсь, писал в другой ветке.
Запускаю Sample.lua, открывается красочное, информативное окно (как у вас на скриншотах), закрываю окно крестиком, скрипт останавливается. Переключаюсь на любую активную вкладку (хром, нотепад и т.д.) и квик падает с дампом.
Да, пробовал добавить в ваш скрипт
function OnStop()
myForm:Release()
is_run=false
end
При попытке остановить скрипт кнопкой "остановить" - квик просто падает (без onStop() просто должен упасть)
Арка отказывается помогать.
w.8.1x64
На выходных попробую на w.8 откатится м.б. поможет, хз.
я не буду здесь говорить о троллинге..........
переходи на FreeRTOS и не е...и людям мозг. сначала со своим ТУпайлом, теперь с несростом в луа.
p.s. это. так, лирика....
Нет времени на изучение английского/ С. Тупайл я перевел худо-бедно на lua.
QUIK -> DDE → Lua: визуальные библиотеки → Визуальный интерфейс QVCLua: обсуждения, замечания, предложения
Форум работает на PunBB, при поддержке Informer Technologies, Inc