скрипт у меня находится в папке c!Quik!scripts Из "Руководство пользователя Интерпретатора языка Lua" взял методом copy&paste 2 файла: quik_table_wrapper.lua и ntime.lua. Файл table_object.lua обрезал до https://pastebin.com/TrMfSzrH Запуск и ... таблица пустая а вот этот код(в ссылке строки 43-53) выдает 2 и 4 а должен 1 и 3
row = t:AddLine()
if SetCell(t.t_id, row, 0, "time") == true then
message("1")
else
message("2")
end
if t:SetValue(row,"ai","ai") == true then
message("3")
else
message("4")
end
SetCell(): Функция возвращает «true» в случае успешного завершения, иначе – «false».
Причина, по которой Вы получаете не тот результат, который ожидаете состоит в следующем. В первом условии
Код
if SetCell(t.t_id, row, 0, "time") == true then …
Вы пытаетесь задать значение для ячейки второй строки, нулевого столбца, а такого нет, нумерация начинается с единицы. Поэтому значение не устанавливается, возвращается "false" и выдаётся сообщение "2". Во втором условии:
Код
if t:SetValue(row,"ai","ai") == true then …
Проявляется особенность реализации функции SetValue(), представленная в файле quik_table_wrapper.lua – не для всех условий функции был предусмотрен возврат результата. Чтобы функция начала работать так, как Вы того, вероятно, ожидаете – можно её модифицировать следующим образом:
Код
function QTable:SetValue(row, col_name, data)
local col_ind = self.columns[col_name].id or nil
if col_ind == nil then
return false
end
-- если для столбца задана функция форматирования, то она используется
local ff = self.columns[col_name].format_function
if type(ff) == "function" then
-- в качестве строкового представления используется
-- результат выполнения функции форматирования
SetCell(self.t_id, row, col_ind, ff(data), data)
return true
else
SetCell(self.t_id, row, col_ind, tostring(data), data)
return true // эту строчку добавили
end
end
SetCell(t.t_id, row, 1, "time") <- спасибо заработало(я забыл что с 1 надо было начинать) НО t:SetValue(row,"time","ai") <- Не работает то есть в таблице ничего не показывает. Такое чувство что t:SetValue() не работает QTABLE_STRING_TYPE, потому что числа(QTABLE_DOUBLE_TYPE) выводятся
Для столбцов со строковыми типами данных параметр «value» не задается.
А он у Вас указан в функции QTable:SetValue
Следует понимать что пример приведенный в документации является именно примером одной из возможных реализаций функций. никто Вас не принуждает слепо использовать именно его, так как это пример, не более. Если Вам нужно вставлять строковые данные, тогда перепишите пример под свои нужды так чтобы для строковых данных, в SetCell параметр «value» не задавался. Либо напишите свои функции. либо не пишите и используйте те что в документации, а не в примерах. на Ваш выбор.
Вроде решил проблему ... В документации: SetCell(String, Integer, Integer, String) - запись значения в таблицу по указанным номерам столбца и строки 4 аргумента передаются Идем в Файл quik_table_wrapper.lua: смотрим
Код
-- Установить значение в ячейке
function QTable:SetValue(row, col_name, data)
local col_ind = self.columns[col_name].id or nil
if col_ind == nil then
return false
end
-- если для столбца задана функция форматирования, то она используется
local ff = self.columns[col_name].format_function
if type(ff) == "function" then
-- в качестве строкового представления используется
-- результат выполнения функции форматирования
SetCell(self.t_id, row, col_ind, ff(data), data)_____________________<опа 5! аргументов, а не 4
return true
else
SetCell(self.t_id, row, col_ind, tostring(data), data)_____________________<опа 5! аргументов, а не 4
end
end
Сделал SetCell(self.t_id, row, col_ind, tostring(data)) глюк исчез
-- Закрасить ячейку по номеру строки и имени столбца
function QTable:SetColor(row, name, b_color, f_color, sel_b_color, sel_f_color)
local t={}
local col_ind = self.columns[name].id
if col_ind == nil then
return nil
end
t = SetColor(self.t_id, row, col_ind, b_color, f_color, sel_b_color, sel_f_color)
return t
end
-- Функция для подсветки выбранного диапазона ячеек цветом фона
-- и цветом текста в течении указанного времени с плавным «затуханием»
function QTable:Highlight(row, name, b_color, f_color, timeout)
local t={}
local col_ind = self.columns[name].id
if col_ind == nil then
return nil
end
t = Highlight(self.t_id, row, col_ind, b_color, f_color, timeout)
return t
end