151

Re: Визуальный интерфейс VCLua в QUIK

GREEN_X5,
большое спасибо за полный пример кода. В самом деле проблема есть, постараюсь разобраться.

152

Re: Визуальный интерфейс VCLua в QUIK

Camill пишет:

У меня текущей версии частенько происходит зависание квика при закрытии, разработчики говорят, что это где-то внутри 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 тыр заплатил, да и немало таких как я найдется, думаю. )

153

Re: Визуальный интерфейс VCLua в QUIK

GREEN_X5 пишет:

Мне удалось добиться стабильной работы, тьфу*3.

Попробовал ваш вариант, посмотрим как будет работать.

154 (2014-09-25 21:54:11 отредактировано swerg)

Re: Визуальный интерфейс VCLua в QUIK

Как-то интерфейс в 0.5.0 версии заметно изменился.

Например, для Memo для добавления строк было

Memo:Add("Text")

стало

Memo.Lines:Add("Text")

Ну и прочие мелкие приколы, из-за которых то тут, то там - не работают скрипты имеющиеся.
Самое смешное - ранее всё добавлялось в namespace  (так назовём) VCL, то теперь автор изменил на vcl маленькими буквами - опять все не работает!

Приходится во всех скриптах вместо

require "vcl"

заменять на

VCL = require "vcl"

чтобы старые скрипты работали (где было большими буквами написано обращение), например

mainForm = VCL.Form("mainForm")   

Ох и затейник автор!


Добивая всякие мелочи, попутно разбираюсь. Как будет готово - выложу поправленный по-крайней мере для русского языка вариант.

155 (2014-09-26 11:39:35 отредактировано GREEN_X5)

Re: Визуальный интерфейс VCLua в QUIK

swerg, отличная новость, не сдавайтесь! smile Очень ждем.
Вы там не нашли случайно передачу в ячейку или хотя бы в строчку grid цвета, затухающего к defaultcolor?

156 (2014-10-25 19:09:45 отредактировано GREEN_X5)

Re: Визуальный интерфейс VCLua в QUIK

А можно как-то заставить VCLua беспроблемно вызываться из main() потока? Очень уж он (вывод в форму) задерживает колбэки, а соотв. и весь Квик...
luacom ведь не тормозит основной поток..

157

Re: Визуальный интерфейс VCLua в QUIK

GREEN_X5,
Что вы такого выводите в форму, что тормозит? и главное - зачем вы столько в неё выводите?

Сделать, чтобы на самом деле - так не будет никогда. Доступ к пользовательскому интерфейсу - только из основного потока, иначе бед не оберёшься.
Но я совершенно убеждён, что другого -и не надо. Это ведь интерфейс пользователя, т.е. человека. А человек просто не может "переварить"  столько информации, чтобы торможение стало сколь-нибудь заметным. Человеку просто не надо столько, по определению.

Не могли бы вы подробнее рассказать о задаче, которая у вас сколь-нибудь заметно тормозит из-за интерфейса?

158 (2014-11-02 18:05:50 отредактировано GREEN_X5)

Re: Визуальный интерфейс VCLua в QUIK

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
Не знаю как ещё оптимизировать...

159 (2014-11-06 11:17:51 отредактировано GREEN_X5)

Re: Визуальный интерфейс VCLua в QUIK

Короче, неприемлемые тормоза были на рабочем ноутбуке с видео intel3000. Запустил в работу на ноуте с дискретной видеокартой - всё стало очень неплохо. )
vclua отрабатывает замечательно! )

160 (2014-12-02 22:26:52 отредактировано gellerda)

Re: Визуальный интерфейс VCLua в QUIK

Подскажите, что за функция Refresh() для объекта Shape? Не могу найти ее описание. Для чего она нужна?

Замучился. Квик падает, если постоянно (в моем случае раз в секунду) менять ширину прямоугольника Shape. Хотел сделать несколько "баров" которые бы во времени меняли свою ширину. Но, поработав некоторое время, квик падает. Такое ощущение что чем выше интенсивность и количество изменяемых баров, тем быстрее упадет. Может минут 10 проработать если не очень интенсивно.
Попытался даже просто присваивать постоянно константную ширину (например 10) в цикле - все равно падает со временем. Если закомментить изменение ширины Shape - все стабильно.

arrStakanV_shapes_B[i].Width = 10; -- Если это закомментить, то проблема исчезает. Массив объектов Shape, из 4 элементов.

Пока работает, ширина меняется, все красиво как надо.

Что делать?

161

Re: Визуальный интерфейс VCLua в QUIK

gellerda, из main его ширину меняете?
Я тоже думал прямоугольниками "графики" рисовать, но решил ячейки grid закрашивать (с прозрачной сеткой). Работает стабильно. Не из main конечно.

162 (2014-12-03 14:08:54 отредактировано gellerda)

Re: Визуальный интерфейс VCLua в QUIK

GREEN_X5 пишет:

gellerda, из main его ширину меняете?
Я тоже думал прямоугольниками "графики" рисовать, но решил ячейки grid закрашивать (с прозрачной сеткой). Работает стабильно. Не из main конечно.

Нет, в main c VCL не работаю. Дело обстоит еще хуже, как оказалось. Потестил подольше. Оказалось она в любом случае падает. Просто в том безопасном варианте, как я думал, она работает дольше. Час проработала - упала. А если Shape.width менять активно, то гораздо быстрее. Чет идет к тому что другую библиотеку брать нужно.
А вы как график гридом рисуете, просто очень мелкую сетку берете?

163 (2014-12-03 15:52:57 отредактировано gellerda)

Re: Визуальный интерфейс VCLua в QUIK

В общем, решил переделать под QVCLua. Рузультат отличный! Больше ничего не падает. Новая версия оказалась стабильней.

164

Re: Визуальный интерфейс VCLua в QUIK

gellerda пишет:
GREEN_X5 пишет:

gellerda, из main его ширину меняете?
Я тоже думал прямоугольниками "графики" рисовать, но решил ячейки grid закрашивать (с прозрачной сеткой). Работает стабильно. Не из main конечно.

Нет, в main c VCL не работаю. Дело обстоит еще хуже, как оказалось. Потестил подольше. Оказалось она в любом случае падает. Просто в том безопасном варианте, как я думал, она работает дольше. Час проработала - упала. А если Shape.width менять активно, то гораздо быстрее. Чет идет к тому что другую библиотеку брать нужно.
А вы как график гридом рисуете, просто очень мелкую сетку берете?

Да, мелкий размер ячеек.
qvcl действительно стабильнее, да и swerg в нем русский язык наладил.

165

Re: Визуальный интерфейс VCLua в QUIK

квик 6.16.0.42

Добрый вечер.
Запускаю скрипт из 43 поста, работает, однако при многократной остановке скрипта (закрытие формы или кнопкой остановить) квик падает с сообщением "internal exception happend ..."

166

Re: Визуальный интерфейс VCLua в QUIK

И не забываем про жесткую выгрузку с версии 6.16., может помочь завершающий sleep в main.

function main() 
while is_run do 
sleep(1) end 
sleep(300) 
end

167 (2015-01-18 14:50:59 отредактировано kalikazandr)

Re: Визуальный интерфейс VCLua в QUIK

sam063rus пишет:

onFormClose убрать. В конце main после цикла добавить сollectgarbage(). И можно хоть 20 раз передёргивать скрипт.

GREEN_X5 пишет:

И не забываем про жесткую выгрузку с версии 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)?
Спасибо.

168

Re: Визуальный интерфейс VCLua в QUIK

Подскажите как использовать контрол ListView, на форме он создается, а вот какие методы для добавления Item-в и и колонок не могу понять, все перепробовал, результат "....attempt to call method 'AddColumn' (a nil value)" пробовал и AddColumn, AddNewItem и AddItem.

169

Re: Визуальный интерфейс VCLua в QUIK

.:KOLYAN:. пишет:

Подскажите как использовать контрол ListView, на форме он создается, а вот какие методы для добавления Item-в и и колонок не могу понять, все перепробовал, результат "....attempt to call method 'AddColumn' (a nil value)" пробовал и AddColumn, AddNewItem и AddItem.

Нормальной полной документации разработчик vcl не выкладывал.
Загляните в исходники библиотеки, там точно всё найдёте.

170

Re: Визуальный интерфейс VCLua в QUIK

Вот как раз 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)", в этом то и дело, может есть какие-то подводные камни?

171 (2015-03-30 18:25:26 отредактировано swerg)

Re: Визуальный интерфейс VCLua в QUIK

.:KOLYAN:.,
зачем вам этот ListView? StringGrid делает всё тоже самое и работа с ним понятна.

172

Re: Визуальный интерфейс VCLua в QUIK

swerg,
StringGrid на форме определяется как контрол Window1 и средствами скриптов AutoIt никак не получается извлечь из грида значения, стоит задача выводить данные из скрипта Lua на форму и считывать их. А вот ListView определяется как SysListView и есть возможность считать данные с формы скриптами, поэтому и пытаюсь разобраться с этим контролом.

173 (2015-03-30 22:22:40 отредактировано swerg)

Re: Визуальный интерфейс VCLua в QUIK

Может данные сразу считывать? без такого вот хитровыпученного способа
А, речь про AutoIt
А что вы читаете? и куда потом это передаёте? Ну т.е. может можно будет придумать более удобный интерфейс для передачи нужных вам данных сразу куда надо.

Попробовал сейчас в этот ListView поиспользовать - у меня впечатление, что он недоделанный в vclua. Не виду я вариантов добавить в него столбцы

174

Re: Визуальный интерфейс VCLua в QUIK

swerg,
Спасибо, что попытались помочь, все таки правда будет правильным направление выводить данные допустим в файл, а уже из него читать и принимать решения о дальнейшей работе скрипта AutoIt.

175

Re: Визуальный интерфейс VCLua в QUIK

А всё-таки, какие задачи вы решаете при помощи AutoIt? Можт это можно решить Lua-скриптом?