e2e4 (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Глюк в программе Quik после обновления, Нужна помощь
 
Раньше не приходилось откатывать Quik.
Так понимаю, копирования с заменой всех файлов из папки SBERBANK\QUIK_x64\backup\20220927 в SBERBANK\QUIK_x64 достаточно будет?
Глюк в программе Quik после обновления, Нужна помощь
 
Сильно извиняюсь, не в ту тему отправил
Глюк в программе Quik после обновления, Нужна помощь
 
Собственно, обновилась программа у сберброкера (сама попросила, стала версия 9.7.1.10 ).
Теперь, если в любой таблице "Текущие торги" сменить инструмент (кликнуть мышкой по невыбранной строке или сменить ее стрелкой на клавиатуре), то главное окно Quik'a становится неактивным, пропадает клавиатурный фокус.
Т.е. теряется возможность перебирать позиции в таблице "Текущие торги" с помощью клавиатуры, нужно каждый раз возвращать фокус на главное окно.
В других таблицах Quik'a такого нет.
Может уже было такое у кого, как исправить, ждать год нового обновления или откатывать к старой версии?
Подскажите по ошибке в коде
 
Прошу прощения, вроде как разобрался.
Заменил  loadstring()  на load().
Разницы в работе скрипта пока не заметил.
Подскажите по ошибке в коде
 
На днях обновился QUIK у сбера и вылезла ошибка "attempt to call a nil value (global 'loadstring')" вот в такой строчке кода:

local func, err = loadstring("return ".."{["x"]=0,["y"]=0}")

Подскажите, пожалуйста, что тут поменялось и как исправить?
Отладка QUIK 9.1
 
Цитата
Имеется ввиду что не появляются окна и таблицы которые были открыты до начала замены старого контракта на новый.
У меня несколько другая ситуация. Есть lua-скрипт, который стартует вместе запуском программы quik и создает окно-таблицу.
Если, после авторизации, quik показывает диалог с запросом замены истекающего фьючерса на новый и ответ на него утвердительный, то происходит "как-бы переоткрытие" видимых в этот момент таблиц.
Их окна закрываются и тут же открываются вновь. А окно-таблица созданная lua-скриптом тоже закрывается, но вновь уже не отрывается.
Из менеджера окон пропадает, хотя сам lua-скрипт работает. Приходится его останавливать и запускать по новой.
Ведь так быть не должно?
Проблема с выводом в пользовательскую таблицу
 
Цитата
Старатель написал:
так точно, спасибо,  пока и сам остановился на данном способе, я про обнуление идентификатора таблицы в OnStop
так даже проще, ничего проверять не нужно
Проблема с выводом в пользовательскую таблицу
 
Цитата
Anton написал:
вставлять свой цикл обработки сообщений - это сложновато ещё для меня :smile:  
длл для вызова winapi из lua не использую, только свой длл-код по необходимости
мне не ясна была логика работы, на чем ожидает/подвисает, а Вы мне объяснили, спс
внес поправки, теперь как-бы всё устраивает
Проблема с выводом в пользовательскую таблицу
 
Цитата
Anton написал:
спасибо за ответ, всё так просто и логично оказалось, теперь стало понятнее, сам бы наверное не допёр, особенно про перерисовку по WM_PAINT.
сделал проверку, что если скрипт останавливается вручную, то вывода из main в таблицу не будет, а будет из OnStop и наоборот.
Проблема с выводом в пользовательскую таблицу
 
Есть вот такой простенький код:
Код
IsRun = true


function TableCreate()

  g_tid = AllocTable()

  if (g_tid ~= nil) then

    SetTableNotificationCallback(g_tid, OnTableEvent)

    AddColumn(g_tid, 1, "Сообщение", true, QTABLE_STRING_TYPE, 100)

    if (CreateWindow(g_tid)) then

      SetWindowCaption(g_tid, "Таблица")

      SetWindowPos(g_tid, 0, 0, 800, 200)

    else

      DestroyTable(g_tid)

      g_tid = nil

    end

  end

end


function OnTableEvent(tid, msg, par1, par2)

  PrintDbgStr("OnLogTableEvent enter")

  PrintDbgStr("OnLogTableEvent leave")

end


function OnInit(script)

  PrintDbgStr("OnInit enter")

  TableCreate()

  local row = InsertRow(g_tid, -1)
  SetCell(g_tid, row, 1, "OnInit: Скрипт запущен.")

  PrintDbgStr("OnInit leave")

end


function OnStop(signal)

  PrintDbgStr("OnStop enter")

  IsRun = false

  local row = InsertRow(g_tid, -1)
  SetCell(g_tid, row, 1, "OnStop: Скрипт остановлен.")

  PrintDbgStr("OnStop leave")

end


function main()

  PrintDbgStr("main enter")

  local row = InsertRow(g_tid, -1)
  SetCell(g_tid, row, 1, "main: Скрипт запущен.")

  while (IsRun) do

    sleep(500)

  end

  local row = InsertRow(g_tid, -1)
  SetCell(g_tid, row, 1, "main: Скрипт остановлен.")

  PrintDbgStr("main leave")

end

При его запуске в отладочную консоль выводятся строки:

Код
OnInit enter
OnInit leave
main enter

Появляется окно с таблицей и в неё выводятся строки:

Код
OnInit: Скрипт запущен.
main: Скрипт запущен.

До этого момента всё работает как надо. Если же далее остановить скрипт из диалога управления, то в консоль выводятся строки:

Код
OnStop enter
OnStop leave

Далее окно диалога управления подвисает на 5 секунд. Откуда это время понятно, ожидание завершения потока функции main по умолчанию.

И только сейчас, по истечении этого времени в окне с таблицей появляется строка:

Код
OnStop: Скрипт остановлен.

хотя колл-бэк функция OnStop уже давно отработала, судя по выводу в консоли.

Строка "main: Скрипт остановлен." в окне с таблицей не появляется совсем, т.к. и скорее всего поток main уже принудительно завершен. Соответственно и сообщение "main leave" в консоли тоже не появляется.
Почему виснет очередь сообщений к окну таблицы при остановке скрипта? Как обработать такую ситуацию, если нужен вывод в пользовательскую таблицу по завершении потока main?
Страницы: 1
Наверх