SetCell crash

Страницы: 1
RSS
SetCell crash, Устновка цветов не по порядку вызывает краш Quik а
 
Вот такой код вызывает краш Квика версии 9.7.1.10 (в версии 8.13 все было ок) после остановки работы скрипта и закрытия созданного им окна.
Предыстория - в связи с настойчивой рекомендацией БКС обновил квик. Пр запуске моего скрипта на новой версии Квик стал вылетать. Стал разбираться - и вот.
Суть в том, что если имеется пропущенная колонка (переменная row_color=15 а не 1) то при остановке скрипта происходит вылет квика. Если поставить row_color=1 то все работает ок.
Код
function main()
is_run=true
row_color=15

t_id = AllocTable()
AddColumn(t_id, 0, "0", true, QTABLE_STRING_TYPE, 15)
AddColumn(t_id, row_color, tostring(row_color), true, QTABLE_STRING_TYPE,11)

   t = CreateWindow(t_id)
   SetWindowPos(t_id, 0, 0, 500, 500)

    for i = 1, 15 do
      InsertRow(t_id, i)      
   end
   
      for k=1,15 do
         SetCell(t_id, k, 0, tostring(k)) 
      end      


while is_run do

         for k=1,15 do
   SetColor(t_id, k, row_color, RGB(0,255,0), RGB(0,0,0), RGB(255,255,255), RGB(0,0,0))--Crash here
      end
sleep(500)
end
end
 
В OnStop поставьте DestroyTable(t_id)
 
Все равно вылетает.
Код
function OnStop(stop_flag)
   
  is_run=false
  DestroyTable(t_id)

end


function main()
is_run=true
row_color=15

t_id = AllocTable()
AddColumn(t_id, 0, "0", true, QTABLE_STRING_TYPE, 15)
AddColumn(t_id, row_color, tostring(row_color), true, QTABLE_STRING_TYPE,11)

   t = CreateWindow(t_id)
   SetWindowPos(t_id, 0, 0, 500, 500)

    for i = 1, 15 do
      InsertRow(t_id, i)      
   end
   
      for k=1,15 do
         SetCell(t_id, k, 0, tostring(k)) 
      end      


while is_run do

         for k=1,15 do
   SetColor(t_id, k, row_color, RGB(0,255,0), RGB(0,0,0), RGB(255,255,255), RGB(0,0,0))--Crash here
      end
sleep(500)
end
end
 
Цитата
Mikhail написал:
Вот такой код вызывает краш Квика версии 9.7.1.10 (в версии 8.13 все было ок) после остановки работы скрипта и закрытия созданного им окна.
Предыстория - в связи с настойчивой рекомендацией БКС обновил квик. Пр запуске моего скрипта на новой версии Квик стал вылетать. Стал разбираться - и вот.
Суть в том, что если имеется пропущенная колонка (переменная row_color=15 а не 1) то при остановке скрипта происходит вылет квика. Если поставить row_color=1 то все работает ок.
Код
   function   main ()
is_run =  true 
row_color =  15 

t_id  =   AllocTable ()
 AddColumn (t_id,  0 ,  "0" ,  true , QTABLE_STRING_TYPE,  15 )
 AddColumn (t_id, row_color, tostring(row_color),  true , QTABLE_STRING_TYPE, 11 )

   t  =   CreateWindow (t_id)
    SetWindowPos (t_id,  0 ,  0 ,  500 ,  500 )

     for  i  =   1 ,  15   do 
       InsertRow (t_id, i)      
    end 
   
       for  k =  1 , 15   do 
          SetCell (t_id, k,  0 , tostring(k)) 
       end       


 while  is_run  do 

          for  k =  1 , 15   do 
    SetColor (t_id, k, row_color,  RGB ( 0 , 255 , 0 ),  RGB ( 0 , 0 , 0 ),  RGB ( 255 , 255 , 255 ),  RGB ( 0 , 0 , 0 )) --Crash here 
       end 
 sleep ( 500 )
 end 
 end 
  
добавьте строку так:
Код
function main()
is_run=true
row_color=15

t_id = AllocTable()
 for i=0,15 do  AddColumn (t_id,i, "", false, QTABLE_STRING_TYPE,8)  end -- добавили
AddColumn(t_id, 0, "0", true, QTABLE_STRING_TYPE, 15)
 
Да понятное дело, что при наличии промежуточных колонок все работает.
Я так и не понял баг это квика или моего скрипта или я в мануале что-то пропустил?
Так мы привыкнем подгонять свои скрипты каждый раз под новые баги новых версий квиков.
На то, чтобы выяснить причину вылета у меня ушло часа 4. А дальше что? "Доколе?"
 
По хорошему, надо, чтобы разработчики терминала ответили на поставленные выше вопросы. Пока что кажется, что это баг терминала, раз не проверяются null при освобождении ресурсов в Вашем случае.
 
Цитата
Mikhail написал:
Да понятное дело, что при наличии промежуточных колонок все работает.
Я так и не понял баг это квика или моего скрипта или я в мануале что-то пропустил?
Так мы привыкнем подгонять свои скрипты каждый раз под новые баги новых версий квиков.
На то, чтобы выяснить причину вылета у меня ушло часа 4. А дальше что? "Доколе?"
вообще-то этот вылет уже был на форуме и я дал точно такое же решение.
предполагаю причина банальна.
Так как квик вылетает, то это не учтенная  изначально разработчиками QLUA особенность VMLua.  
Но проявилась она на 9 версии, потому что в этой версии что-то радикально изменили.
 
Цитата
Mikhail написал:
Да понятное дело, что при наличии промежуточных колонок все работает.
Я так и не понял баг это квика или моего скрипта или я в мануале что-то пропустил?
Так мы привыкнем подгонять свои скрипты каждый раз под новые баги новых версий квиков.
На то, чтобы выяснить причину вылета у меня ушло часа 4. А дальше что? "Доколе?"
я хотел бы Вам заметить,
что делать так:
  for k=1,15 do
  SetColor(t_id, k, row_color, RGB(0,255,0), RGB(0,0,0), RGB(255,255,255), RGB(0,0,0))--Crash here
     end
для таблице в которой Вы определили лишь 0 и 15 столбец не корректно.
Предполагаю, что разработчики не учли слишком низкий уровень пользователей и не установили защиту от ...
которой в природе не существует
 
Вы совершенно верно подметили. Защита от Дурака. (я любитель). Иногда за ненадобностю колонок я их просто удаляю в части их определения. И далее скрипт при проходе их просто опускает. Раньше, как говорится все работало.
Теперь же конечно, написана новая функция, которая при запуске дает последовательные номера этим колонкам.
Да, возможно что у меня отсутствует "культура кода". Но в данном случае всеже наверное баг квика.
Страницы: 1
Читают тему (гостей: 1)
Наверх