76

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Krepysh пишет:

Причём изменение параметров приводит к изменению вида таблицы (количества колонок, заголовков, значений ячеек).
Можно было бы просто очищать ячейки и удалять/добавлять колонки, но я не разобрался, как это сделать.

Вы просто задаете новое нужное значение колонок, новое нужное значение строк, заполняете их новыми значениями - вот и все.

77 (2015-02-03 20:31:23 отредактировано Krepysh)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

swerg пишет:

Вы просто задаете новое нужное значение колонок, новое нужное значение строк, заполняете их новыми значениями - вот и все.

При задании свойства hGrid.ColCount = nNumCol выдаётся сообщение:

Use Columns to add/remove columns.


Кстати, значения типа boolean нужно писать строчными буквами:

Flat = true

78

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Swerg, спасибо, сейчас буду проверять

79

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Мелкие вопросы возникли:
а двойной клик правой кнопкой мышки по таблице
и двойной клик колёсиком мышки по таблице можно распознавать, они есть среди функций которые понимаются?
Ну и вопрос не по таблице а в общем, можно ли на нажатия кнопок клавиатуры тоже действия присвоить? Ну например банальное на кнопку "B" или на любую из кнопок клавиатуры?

80

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Krepysh пишет:

Кстати, значения типа boolean нужно писать строчными буквами:

Flat = true

Попробуйте Flat = True и отпишитесь пожалуйста )

81

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

slkumax пишет:

а двойной клик правой кнопкой мышки по таблице и двойной клик колёсиком мышки по таблице можно распознавать, они есть среди функций которые понимаются?

Нет, Windows такого не распознаёт.
Но можно сделать ручками, отловив два последовательных клика правой кнопкой с небольшим интервалом и при небольшом смещении (величина смещения и интервал вообще-то в Windows настраеваемы).

82

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Продублирую здесь сообщение из соседней темы.

Вскрылась неприятная особенность терминала QUIK версии 6.16: в этой версии была добавлена выгрузка Lua при завершении скрипта, что само по себе хорошо, но если скрипт завершается корректно (т.е. завершается main()) - то функция lua_close() вызывается не в основном потоке.
Кратко говоря - это приводит к непредсказуемым падениям терминала QUIK в момент завершения скрипта, в котором используется VCLua (или QVCLua).

Рецепт:
При использовании библиотеки QVCLua в 6.16 версии терминала QUIK - просто уберите из кода Lua скрипта корректное завершение функции main(), т.е. код в ней должен быть пока такой, например:

function main()
  while is_run or true do  -- когда починят - уберем or true
    sleep(50)
  end
end
function OnStop()
  is_run = false
  mainForm:Release() -- уничтожим основную форму скрипта при нажатии "Остановить"
end

Теперь завершить скрипт можно только по кнопке "Остановить" и подождав 5 секунд. (Причем если вы закрыли форму скрипта - то это не страшно; просто скрипт не остановится сам по себе от этого).
В результате применения такого workarroud'а всё работает корректно, падений терминала в момент остановки скриптов с QVCLua не замечено.

83

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

swerg,
в 31-ом сообщении я выложил vclua высланный мне Михаилом, завершает скрипт крестиком формы без каких-л. костылей, к сожалению я не попросил сразу кусок правленого исходника, и не знаю что там правлено... Но это работает.

84 (2015-02-04 15:19:48 отредактировано Krepysh)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

GREEN_X5 пишет:

Попробуйте Flat = True и отпишитесь пожалуйста )

Так я потому и пишу, что уже потестил. Надо: Flat = true. По, крайней мере, у меня в Windows 8 так.

swerg пишет:

Вскрылась неприятная особенность терминала QUIK версии 6.16

Вот шаблон с корректным завершением скрипта:

function main()
  while is_run do
    sleep(50)
  end
  while is_run ~= nil do sleep(50) end  -- эта строка необходима, если в основном потоке после нажатия на кнопку "Остановить" вызываются любые функции QLUA или из сторонних библиотек
end
function OnStop()
  is_run = false
  mainForm:Release() -- уничтожим основную форму скрипта при нажатии "Остановить"
  is_run = nil
end

Вернее, это работает для библиотеки, которую выложил GREEN_X5. Для оригинальной надо добавить ещё sleep() перед завершением main()

85

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Да, Михаил писал какие изменения в коде сделаны.
Но это всё костыли и припарки, особенно sleep(), лишь уменьшающие вероятность проблемы, но не искореняющие её причину.
О причинах я ему написал, надеюсь, понимание будет и терминал QUIK в этом месте поправят.

86 (2015-02-04 15:43:53 отредактировано GREEN_X5)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Krepysh пишет:
GREEN_X5 пишет:

Попробуйте Flat = True и отпишитесь пожалуйста )

Так я потому и пишу, что уже потестил. Надо: Flat = true. По, крайней мере, у меня в Windows 8 так.

Да, сейчас проверил на другом контроле, boolean лучше с маленькой.

87 (2015-02-04 15:48:56 отредактировано GREEN_X5)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

swerg пишет:

Да, Михаил писал какие изменения в коде сделаны.
Но это всё костыли и припарки, особенно sleep(), лишь уменьшающие вероятность проблемы, но не искореняющие её причину.
О причинах я ему написал, надеюсь, понимание будет и терминал QUIK в этом месте поправят.

Работает без всяких sleep(), в том то и дело!

local vcl = require "qvcl"

function OnStop()
    myForm:Release()
    is_run=false
end

myForm = vcl.Form({Name = "myForm", Visible=true, OnClose = OnStop})

is_run = true

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

Что то я сомневаюсь что в Арка будет исправлять qlua под vclua ближайшие лет 20 )

88

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

У меня так:

Flat = True
http://s019.radikal.ru/i640/1502/c1/202c3d44c0dd.png

Flat = true
http://i057.radikal.ru/1502/9c/e8761ac835c6.png

В левом верхнем углу выводится значение grid.Flat

89 (2015-02-04 15:53:23 отредактировано GREEN_X5)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Krepysh, да, я уже проверил у себя, действительно, boolian нужно с маленькой.
Но разработчик, если честно, хочет чтобы мы писали вот так, попробуйте )

Flat = "True"

http://i.imgur.com/p7GR2ZW.png

90

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

GREEN_X5 пишет:

Что то я сомневаюсь что в Арка будет исправлять qlua под vclua ближайшие лет 20 )

Проблема не в vclua. При применённом подходе в терминале 6.16 версии проблема может возникать при использовании любой сколь-нибудь сложной dll, выполняющей какие-либо финализирующие действия при своей выгрузке.
Рецепт от Михаила - он просто противодействует такой выгрузке, хотя таковая (выгрузка) была умышленно добавлена в терминал, и вполне по делу.
При этом использование сторонних dll изначально пропагандируется в ARQA в Lua.
Так что надеюсь, что данная проблема будет исправлена.

91

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

GREEN_X5 пишет:

Работает без всяких sleep(), в том то и дело!

Я сейчас почитал эту ветку. В 13 сообщении:

mbul пишет:

То решение, которое я предложил и дал паре человек попробовать- это скорее "грязный хак".
Побочный эффект - библиотека не выгружается при остановке скрипта.

Так что ещё не известно, что лучше: sleep() или невыгрузка библиотеки.

92

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

GREEN_X5 пишет:

Но разработчик, если честно, хочет чтобы мы писали вот так, попробуйте

Flat = "True"

Что-то мне подсказывает, что это лишь визуализация, просто строковая константа прошита в таком виде, с большой буквы.
Хотя при текстовом представлении в самом деле конвертируется верно только с большой буквы.

93

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Krepysh пишет:

Так что ещё не известно, что лучше: sleep() или невыгрузка библиотеки.

"Невыгрузка библиотеки" - в общем-то ничего страшного не привносит. До 6.16 версии QUIK она и так не выгружалась. Никакой "утечки" ресурсов при этом нет. (ну либо я даже не могу придумать в каком месте)

94

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

swerg пишет:

Проблема не в vclua. При применённом подходе в терминале 6.16 версии проблема может возникать при использовании любой сколь-нибудь сложной dll, выполняющей какие-либо финализирующие действия при своей выгрузке.

Поясните мне такой момент. Вот есть код:

local vcl = require "qvcl"

is_run = true

function OnStop()
  is_run = false
  myForm:Release()
  message('Stop', 2)
  is_run = nil
end

myForm = vcl.Form({OnClose = OnStop})
myForm:Show()

function main() 
  while is_run do sleep(1) end
  while is_run ~= nil do end
end

С непатченной библиотекой он крашит QUIK при попытке остановить его. Т.е., получается, что функция myForm:Release() возвращает код завершения ещё до того как выполнит свою работу?

95

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Krepysh пишет:
GREEN_X5 пишет:

Работает без всяких sleep(), в том то и дело!

Я сейчас почитал эту ветку. В 13 сообщении:

mbul пишет:

То решение, которое я предложил и дал паре человек попробовать- это скорее "грязный хак".
Побочный эффект - библиотека не выгружается при остановке скрипта.

Так что ещё не известно, что лучше: sleep() или невыгрузка библиотеки.

"Грязный хак" не в смысле что данные наших кред.карт и temp-фото с посещенных порносайтов окажутся на сервере Арки. )
Я пользуюсь, отлично работает, перезапускается.
Схему со слип в конце майн я предложил на форуме арки сразу после выхода версии 6.16...,
http://forum-archive.quik.ru/forum/lua/124475/124706/
т.к. все скрипты встали колом. Заработало, но позже нашел проблемы и со слип, в итоге вариант с "хаком" пока единственный рабочий.

96 (2015-02-04 16:52:57 отредактировано swerg)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Krepysh пишет:

С непатченной библиотекой он крашит QUIK при попытке остановить его. Т.е., получается, что функция myForm:Release() возвращает код завершения ещё до того как выполнит свою работу?

Что происходит, я подробно написал вот здесь после слов "Оно и понятно"
http://quik2dde.ru/viewtopic.php?pid=929#p929

Если вам что-то в том тексте не ясно - извините, я не буду разъяснять, прошу без обид, ибо если вы знаете про многопоточную работу в Windows - то должно быть понятно, если не знаете - то наверное и не стоит заморачиваться, есть много других интересных и полезных дел. Еще раз прошу без обид, но, согласитесь, к теме работы с библиотекой это не относится.

PS
Если честно, абсолютно стройной и непротиворечивой картинки возникновения проблем из-за многопоточной деинициализации при наличии sleep'ов у меня нет. Но и детально копаться мне не очень хочется, если честно, т.к. примерно в чем проблема - на мой взгляд, вполне понятно.

97 (2015-02-04 17:31:37 отредактировано Krepysh)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Просто наблюдения. Запускаем скрипт:

local vcl = require "qvcl"
local is_run = true

function _CloseGUI()
  myForm:Release()
  PrintDbgStr('_CloseGUI')
  sleep(3000)
  is_run = nil
end

myForm = vcl.Form({OnClose = _CloseGUI})
myForm:Show()

function main() 
  while is_run ~= nil do sleep(50) end
  sleep(300)
end

function OnStop()
  _CloseGUI()
end

Я полагал, что все функции в скрипте должны выполняться последовательно в пределах одного потока. Но что мы видим при закрытии окна или остановке кнопкой? Сначала текстовое сообщение "_CloseGUI", затем только через 3 сек удаляется окно. И всё это, заметьте, происходит в одном потоке. Или нет?

Я это к тому, что myForm:Release() сразу передаёт управление следующему оператору, а затем уже что-то там делает. Вот тут-то первый камень, об который спотыкается скрипт.
Но и в самом QLUA для терминала v.6.16 есть ошибка - это закрытие Lua до того как отработают все операторы в основном потоке - это второй камень.

98 (2015-02-04 17:52:47 отредактировано swerg)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Инициализируемые/деинициализируемые библиотекой в своих потрохах сущности не ограничиваются визуальными компонентами, доступными из Lua. Т.е. на уровне Lua-кода мы ничего не найдём, надо лезть много глубже, но не понятно зачем эти усилия.
И дело явно в этих "неочевидных" сущностях, коль скоро проблема из-за вызова lua_close() в другом потоке, которое выполняется уже после завершения Lua-скрипта в любом случае.

myForm:Release() ничего не делает, грубо говоря, она лишь кидает форме в очередь сообщение "Давай будем уничтожаться". Потому что если разрушиться сразу (что происходит при вызове :Free) - то все завалится, опять же понятно почему (почитайте про применение Release в Delphi и почему он именно для форм нужен). На словах я замучаюсь пояснять, тут картинка нужна, но опять же - зачем wink

99 (2015-02-04 23:19:10 отредактировано Krepysh)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

GREEN_X5 пишет:

Схему со слип в конце майн я предложил на форуме арки сразу после выхода версии 6.16...,
http://forum-archive.quik.ru/forum/lua/124475/124706/
т.к. все скрипты встали колом. Заработало, но позже нашел проблемы и со слип, в итоге вариант с "хаком" пока единственный рабочий.

Потестил с непропатченной библиотекой. Действительно, более сложные скрипты всё равно валятся. Проблема в том, что со sleep() удаление формы (и завершение чего-то там ещё) происходит только после таймаута, указанного в sleep().

100

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

swerg пишет:
GREEN_X5 пишет:

Что то я сомневаюсь что в Арка будет исправлять qlua под vclua ближайшие лет 20 )

Проблема не в vclua. При применённом подходе в терминале 6.16 версии проблема может возникать при использовании любой сколь-нибудь сложной dll, выполняющей какие-либо финализирующие действия при своей выгрузке.
Рецепт от Михаила - он просто противодействует такой выгрузке, хотя таковая (выгрузка) была умышленно добавлена в терминал, и вполне по делу.
При этом использование сторонних dll изначально пропагандируется в ARQA в Lua.
Так что надеюсь, что данная проблема будет исправлена.

Я бы поправил немного:
1. не проблема исправлена, а изменено поведение
2. не сложной dll, а не потокобезопасной dll