Re: Визуальный интерфейс VCLua в QUIK
GREEN_X5,
большое спасибо за полный пример кода. В самом деле проблема есть, постараюсь разобраться.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
QUIK -> DDE → Lua: визуальные библиотеки → Визуальный интерфейс VCLua в QUIK
Страницы Назад 1 … 5 6 7 8 9 10 11 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться
GREEN_X5,
большое спасибо за полный пример кода. В самом деле проблема есть, постараюсь разобраться.
У меня текущей версии частенько происходит зависание квика при закрытии, разработчики говорят, что это где-то внутри VCL, и они ничего не могут сделать. Так что я новую версию жду.
Мне удалось добиться стабильной работы, тьфу*3. Помогло - в форме сперва задаем grid-ы, затем уже все кнопки (не наоборот!), не косячим в коде, не допускаем исключений, закрываю вот так
function OnClose()
is_run = false
sleep(200)
settingForm:Free()
mainForm:Free()
end
function OnFormClose(...)
is_run = false
sleep(200)
settingForm:Free()
mainForm:Free()
end
Версия VCLua от swerg, остальные, что пробовал - криво работают с моими навороченными формами.
swerg, ешё раз спасибо за труды! Я бы предложил вам допилить прежнюю или допилить и скомпилировать последнюю VCLua под Lua5.1, как я понял там нужно затереть указание версии под последнюю Lua, и она начнет запускаться, и за деньги раздавать свою каверверсию. Я бы например 1 тыр заплатил, да и немало таких как я найдется, думаю. )
Мне удалось добиться стабильной работы, тьфу*3.
Попробовал ваш вариант, посмотрим как будет работать.
Как-то интерфейс в 0.5.0 версии заметно изменился.
Например, для Memo для добавления строк было
Memo:Add("Text")
стало
Memo.Lines:Add("Text")
Ну и прочие мелкие приколы, из-за которых то тут, то там - не работают скрипты имеющиеся.
Самое смешное - ранее всё добавлялось в namespace (так назовём) VCL, то теперь автор изменил на vcl маленькими буквами - опять все не работает!
Приходится во всех скриптах вместо
require "vcl"
заменять на
VCL = require "vcl"
чтобы старые скрипты работали (где было большими буквами написано обращение), например
mainForm = VCL.Form("mainForm")
Ох и затейник автор!
Добивая всякие мелочи, попутно разбираюсь. Как будет готово - выложу поправленный по-крайней мере для русского языка вариант.
swerg, отличная новость, не сдавайтесь! Очень ждем.
Вы там не нашли случайно передачу в ячейку или хотя бы в строчку grid цвета, затухающего к defaultcolor?
А можно как-то заставить VCLua беспроблемно вызываться из main() потока? Очень уж он (вывод в форму) задерживает колбэки, а соотв. и весь Квик...
luacom ведь не тормозит основной поток..
GREEN_X5,
Что вы такого выводите в форму, что тормозит? и главное - зачем вы столько в неё выводите?
Сделать, чтобы на самом деле - так не будет никогда. Доступ к пользовательскому интерфейсу - только из основного потока, иначе бед не оберёшься.
Но я совершенно убеждён, что другого -и не надо. Это ведь интерфейс пользователя, т.е. человека. А человек просто не может "переварить" столько информации, чтобы торможение стало сколь-нибудь заметным. Человеку просто не надо столько, по определению.
Не могли бы вы подробнее рассказать о задаче, которая у вас сколь-нибудь заметно тормозит из-за интерфейса?
swerg,
Основной визуальный интерфейс - доска опционов, обычно 50 бумаг. Выводится 25 параметров, итого grid 50х25. Все параметры нужно контролировать, но визуальный контроль время от времени. Строки таблицы обновляются с каждым изменением в стаканах бумаг. Итого в горячую пору могут быть сотни обновлений в секунду. Недавно додумался поставить выключатель вывода. Постоянно тормозить перестает.
Поскольку, как вы и говорите, работа с vclua из main нежелательна, я сперва сделал всю обработку и вывод графики в колбэке. Получил жуткие тормоза в колбэках и как следствие main (стоит индикатор - вертушка).
Затем перестроил, как и советовали на параллельном форуме - колбэк только снимает срез стакана, бросает инструмент в таблицу-очередь, main читает очередь и каждую итерацию выполняет всю математику, логику, пуляет заявки и бросает инструмент в другую таблицу-очередь на вывод в vclua. Колбэк теперь, кроме приема среза стаканов, если в очереди что-то есть - отображает.
Добавил таймер на вывод - теперь выводит графику раз в секунду, не чаще. Эту секунду очередь на вывод наполняется. И мне это показалось интересным, ведь vlua не начнет прорисовку, пока колбэк не отработает. И за эту итерацию колбэка мы можем присваивать разные значения одной и той же переменной vclua хоть сколько раз, vclua выведет на экран только последнее значение, когда завершится колбэк.
Жизнь наладилась. В основном индикатор очереди показывает что практически всегда main успевает обсчитать всю очередь. Но вот колбэк периодически подвисает на 1-2 сек, если в очереди на вывод толпа. Это я вижу по индикатору-вертушке main.
Повторюсь, с наличием выключателя вывода это всё стало не критично. Просто думаю, может быть вы или кто подскажет более рациональную схему, раз нельзя вывести vclua в какой-н. третий поток и синхронизировать межпоточный доступ к её переменным. ))
Сейчас вот так:
function main()
while is_run do
if #tabchange~=0 then
--индикация кол-ва в очереди
local code=table.remove(tabchange,1) --берем бумагу из очереди на обработку
-- чтение ТТП
-- математика и логика
-- отправка транзакции
--table.insert(taboutscreen,code) --кладем в очередь на вывод
end
end
end
function OnQuote(sec, code)
--читаем срез стаканов
table.insert(tabchange,code) --кладем в очередь на обработку
-- === блок вывода в vclua ===--
if #taboutscreen~=0 then
local code=table.remove(taboutscreen,,1)
-- выводим графику из очереди на вывод
end
end
везде LIFO
Не знаю как ещё оптимизировать...
Короче, неприемлемые тормоза были на рабочем ноутбуке с видео intel3000. Запустил в работу на ноуте с дискретной видеокартой - всё стало очень неплохо. )
vclua отрабатывает замечательно! )
Подскажите, что за функция Refresh() для объекта Shape? Не могу найти ее описание. Для чего она нужна?
Замучился. Квик падает, если постоянно (в моем случае раз в секунду) менять ширину прямоугольника Shape. Хотел сделать несколько "баров" которые бы во времени меняли свою ширину. Но, поработав некоторое время, квик падает. Такое ощущение что чем выше интенсивность и количество изменяемых баров, тем быстрее упадет. Может минут 10 проработать если не очень интенсивно.
Попытался даже просто присваивать постоянно константную ширину (например 10) в цикле - все равно падает со временем. Если закомментить изменение ширины Shape - все стабильно.
arrStakanV_shapes_B[i].Width = 10; -- Если это закомментить, то проблема исчезает. Массив объектов Shape, из 4 элементов.
Пока работает, ширина меняется, все красиво как надо.
Что делать?
gellerda, из main его ширину меняете?
Я тоже думал прямоугольниками "графики" рисовать, но решил ячейки grid закрашивать (с прозрачной сеткой). Работает стабильно. Не из main конечно.
gellerda, из main его ширину меняете?
Я тоже думал прямоугольниками "графики" рисовать, но решил ячейки grid закрашивать (с прозрачной сеткой). Работает стабильно. Не из main конечно.
Нет, в main c VCL не работаю. Дело обстоит еще хуже, как оказалось. Потестил подольше. Оказалось она в любом случае падает. Просто в том безопасном варианте, как я думал, она работает дольше. Час проработала - упала. А если Shape.width менять активно, то гораздо быстрее. Чет идет к тому что другую библиотеку брать нужно.
А вы как график гридом рисуете, просто очень мелкую сетку берете?
В общем, решил переделать под QVCLua. Рузультат отличный! Больше ничего не падает. Новая версия оказалась стабильней.
GREEN_X5 пишет:gellerda, из main его ширину меняете?
Я тоже думал прямоугольниками "графики" рисовать, но решил ячейки grid закрашивать (с прозрачной сеткой). Работает стабильно. Не из main конечно.Нет, в main c VCL не работаю. Дело обстоит еще хуже, как оказалось. Потестил подольше. Оказалось она в любом случае падает. Просто в том безопасном варианте, как я думал, она работает дольше. Час проработала - упала. А если Shape.width менять активно, то гораздо быстрее. Чет идет к тому что другую библиотеку брать нужно.
А вы как график гридом рисуете, просто очень мелкую сетку берете?
Да, мелкий размер ячеек.
qvcl действительно стабильнее, да и swerg в нем русский язык наладил.
квик 6.16.0.42
Добрый вечер.
Запускаю скрипт из 43 поста, работает, однако при многократной остановке скрипта (закрытие формы или кнопкой остановить) квик падает с сообщением "internal exception happend ..."
И не забываем про жесткую выгрузку с версии 6.16., может помочь завершающий sleep в main.
function main()
while is_run do
sleep(1) end
sleep(300)
end
onFormClose убрать. В конце main после цикла добавить сollectgarbage(). И можно хоть 20 раз передёргивать скрипт.
И не забываем про жесткую выгрузку с версии 6.16.
Не работает в обоих случаях. Без onFormClose еще и скрипт не останавливается.
Про выгрузку мне арка говорила, когда я в onStop() прописал функцию сброса в файл в таком порядке:
function OnStop()--не правильно, квик падает при остановке скрипта
is_run = false
--функция
end
function OnStop()--правильно
--функция
is_run = false
end
GREEN_X5
[url]http://quik2dde.ru/viewtopic.php?id=112[/url] топик 19 нет функции OnStop() --квик падает при остановке.
Да, приметил, ошибка вылетает при переключении вкладок из квик==>хром или нотепад++ или эксель TABом или на панели задач.
Причем разницы нет включен скрипт(Sample.lua тоже) или остановлен.
В чем разница между qvcl.dll и vcl.dll(правленые swerg)?
Спасибо.
Подскажите как использовать контрол ListView, на форме он создается, а вот какие методы для добавления Item-в и и колонок не могу понять, все перепробовал, результат "....attempt to call method 'AddColumn' (a nil value)" пробовал и AddColumn, AddNewItem и AddItem.
Подскажите как использовать контрол ListView, на форме он создается, а вот какие методы для добавления Item-в и и колонок не могу понять, все перепробовал, результат "....attempt to call method 'AddColumn' (a nil value)" пробовал и AddColumn, AddNewItem и AddItem.
Нормальной полной документации разработчик vcl не выкладывал.
Загляните в исходники библиотеки, там точно всё найдёте.
Вот как раз AddColumn, AddNewItem и AddItem были взяты из исходников
function AddNewItem(L: Plua_State): Integer; cdecl;
var
lItems: TListItems;
newItem: TListItem;
begin
CheckArg(L, 1);
lItems := TListItems(GetLuaObject(L, 1));
newItem := lItems.Add;
lua_pushtable_object(L, newItem, -1);
Result := 1;
end;
function AddColumn(L: Plua_State): Integer; cdecl;
var
lColumns: TListColumns;
newColumn: TListColumn;
begin
CheckArg(L, 1);
lColumns := TListColumns(GetLuaObject(L, 1));
newColumn := lColumns.Add;
lua_pushtable_object(L, newColumn, -1);
Result := 1;
end;
function AddItem(L: Plua_State): Integer; cdecl;
var
lItems: TListItems;
newItem: TListItem;
begin
CheckArg(L, 2);
lItems := TListItems(GetLuaObject(L, 1));
newItem := TListItem(GetLuaObject(L, 2));
lItems.AddItem(newItem);
Result := 0;
end;
Но интерпретатор говорит, что таких методов нет "....attempt to call method 'AddColumn' (a nil value)", в этом то и дело, может есть какие-то подводные камни?
.:KOLYAN:.,
зачем вам этот ListView? StringGrid делает всё тоже самое и работа с ним понятна.
swerg,
StringGrid на форме определяется как контрол Window1 и средствами скриптов AutoIt никак не получается извлечь из грида значения, стоит задача выводить данные из скрипта Lua на форму и считывать их. А вот ListView определяется как SysListView и есть возможность считать данные с формы скриптами, поэтому и пытаюсь разобраться с этим контролом.
Может данные сразу считывать? без такого вот хитровыпученного способа
А, речь про AutoIt
А что вы читаете? и куда потом это передаёте? Ну т.е. может можно будет придумать более удобный интерфейс для передачи нужных вам данных сразу куда надо.
Попробовал сейчас в этот ListView поиспользовать - у меня впечатление, что он недоделанный в vclua. Не виду я вариантов добавить в него столбцы
swerg,
Спасибо, что попытались помочь, все таки правда будет правильным направление выводить данные допустим в файл, а уже из него читать и принимать решения о дальнейшей работе скрипта AutoIt.
А всё-таки, какие задачи вы решаете при помощи AutoIt? Можт это можно решить Lua-скриптом?
Страницы Назад 1 … 5 6 7 8 9 10 11 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться
QUIK -> DDE → Lua: визуальные библиотеки → Визуальный интерфейс VCLua в QUIK
Форум работает на PunBB, при поддержке Informer Technologies, Inc