Как закрыть форточку?

Страницы: 1
RSS
Как закрыть форточку?
 
Сломал себе мозг пытаясь закрыть окно способом указанным в документации.
 Тестовый пример:
Скрытый текст
В итоге вывод message: false/true/false
Это нормально? Как его еще можно закрыть чтобы оно было закрыто?
 
Код
      skt_id = AllocTable()
      CreateWindow(skt_id)
      SetWindowPos(skt_id, 500, 0, 800, 400)
      local iwc1=IsWindowClosed(skt_id)
      local dt=DestroyTable(skt_id)
      local iwc2=IsWindowClosed(skt_id)
      message(tostring(iwc1).."/"..tostring(dt).."/"..tostring(iwc2))
Пардон, криво пример вставил
 
Наверное я не точно сформулировал вопрос разработчикам и по этому не вижу ответа.
Вопрос:
 Почему после закрытия пользовательской таблицы (см. пример) функцией DestroyTable(skt_id), функция IsWindowClosed(skt_id) считает что окно таблицы по прежнему открыто?
 
Здравствуйте!

Ваше письмо получено, проблема изучается. Постараемся в ближайшее время дать ответ.
 
Kolossi, добрый день,

Действительно в ПО QLua есть ошибка работы  функции IsWindowClosed.

Мы исправим её в очередном обновлении ПО. Приносим извинения за причинённые неудобства.

 
https://forum.quik.ru/messages/forum10/message39685/topic1675/#message39685
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Старатель написал:
https://forum.quik.ru/messages/forum10/message39685/topic1675/#message39685
Твоюжвбогадушумать :(
 
ещё кусочек кода который непонятно почему не работает
Скрытый текст

 message('main end2 is_run = ' .. tostring(is_run),1)
эта строчка уже не исполняется, всё ломает   DestroyTable(skt_id)
 
Цитата
Kolossi написал:
Наверное я не точно сформулировал вопрос разработчикам и по этому не вижу ответа.
Вопрос:
 Почему после закрытия пользовательской таблицы (см. пример) функцией DestroyTable(skt_id), функция IsWindowClosed(skt_id) считает что окно таблицы по прежнему открыто?
Добрый день,

Описанная в данном обращении проблема была устранена в версии 9.4.0 терминала QUIK.
Рекомендуем вам обновить версию ПО.
Приносим извинения за причиненные неудобства.

 
Цитата
Алексей написал:
ещё кусочек кода который непонятно почему не работает
    Скрытый текст
is_run = true
message('start is_run = ' .. tostring(is_run),1)
function main()
 skt_id = AllocTable()
 CreateWindow(skt_id)
 SetWindowPos(skt_id, 500, 0, 800, 400)
 message('main start is_run = ' .. tostring(is_run),1)
 while is_run do
   sleep(100)
 end
 message('main end1 is_run = ' .. tostring(is_run),1)
 DestroyTable(skt_id)
 message('main end2 is_run = ' .. tostring(is_run),1)
end

function OnStop()
   is_run = false
   return 200
end
 message('main end2 is_run = ' .. tostring(is_run),1)
эта строчка уже не исполняется, всё ломает   DestroyTable(skt_id)
проверил код на новой версии 9,4,0,130, проблема та же, не закрывается форточка.
 
Здравствуйте.

На основе описанного в документации QLUA.chm можно сделать вывод, что после вызова OnStop() не гарантировано, что main() завершится до конца, поэтому в вашем случае таблица и не удаляется.

На основе этого предлагаем добавить процедуру удаления окна в тело колбека OnStop().
 
Daniil Pozdnyakov, Потеря управления тут уже тыщу раз обсуждалась, и у меня, например, в OnStop уже и так давно сидит не какое-то несчастное убийство окна, а пересчёт портфеля, сверка портфелей, сброс дампа, работа с логом, и только после всего этого закрывается таблица по тикерам и меню, если оно открыто, когда уже пофиг, закроются они или нет. При этом предполагается, что все активные заявки будут сняты, ибо связываться ещё и с этим в OnStop есть уже полная клиника! Но вас самих разве не тошнит от этого многолетнего маразма? Выбросьте вообще OnStop к чертям собачьим, что ли, а по нажатию кнопки "Остановить" просто сбрасывайте флаг isRun и отдавайте управление в main - больше пользы будет.
 
Владимир, здравствуйте.

На данный момент такова реализация колбека OnStop. Мы можем зарегистрировать пожелание на его модернизацию. Однако для этого нам необходимо знать, как Вы видите реализацию данной функцию. Опишите, пожалуйста.
 
Daniil Pozdnyakov, Нет, спасибо. Со своими проблемами я справился, а регистрировать... после того, как одно из моих предложений зарегистрировали дважды, я регистрировать перестал.
 
Цитата
Daniil Pozdnyakov написал:
Здравствуйте.

На основе описанного в документации QLUA.chm можно сделать вывод, что после вызова OnStop() не гарантировано, что main() завершится до конца, поэтому в вашем случае таблица и не удаляется.

На основе этого предлагаем добавить процедуру удаления окна в тело колбека OnStop().
Самое интересное что, чтобы я не написал в конце main, ломается всё только на DestroyTable, что происходит в этой функции что main  не завершается непонятно.
там операции с файлами делал, всё норм, цвета и текст в таблице менял, всё работает, кроме DestroyTable.
 
Алексей, Я поднимал этот вопрос почти сразу после своего появления здесь. Почитайте, что говорил мне АНтон по этому поводу: https://forum.quik.ru/messages/forum10/message49164/topic5872/#message49164
 
Прочитал всю ту ветку, проблема решается коряво, в квике непонятно на какие грабли ещё можно наступить, проблема с OnStop и работа с таблицами, озвучена давно и не решается никак. Т.е. это приводит к непредсказуемым результатам, и техподдержке всё равно что происходит. Вроде как бы почти работает, и так сойдёт их лозунг судя по всему. Печально на это всё смотреть.
Страницы: 1
Читают тему
Наверх