Перестают работать события SetTableNotificationCallback
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
24.12.2019 12:54:43
Создаём QLua-окно, назначаем ему колбек на события QTABLE_CHAR и/или QTABLE_VKEY. Если переключиться на контрол "Edit" или "ComboBox" на панели инструментов ("Поиск инструмента", "Окно сообщений" и пр.), а затем активировать окно кликом на его заголовок, то события, назначенные раннее не работают. Чтобы заработали, нужно активировать кликом внутри окна.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 23.01.2015
25.12.2019 08:44:01
Старатель, проблема изучается. Постараемся в ближайшее время дать ответ.
QUIK clients support
Сообщений: Регистрация: 22.12.2014
27.12.2019 13:42:07
Цитата
Старатель написал: Создаём QLua-окно, назначаем ему колбек на события QTABLE_CHAR и/или QTABLE_VKEY. Если переключиться на контрол "Edit" или "ComboBox" на панели инструментов ("Поиск инструмента", "Окно сообщений" и пр.), а затем активировать окно кликом на его заголовок, то события, назначенные раннее не работают. Чтобы заработали, нужно активировать кликом внутри окна.
Добрый день.
Описанная ошибка будет исправлена в одной из очередных версий ПО. Приносим извинения за причиненные неудобства.
Пользователь
Сообщений: Регистрация: 12.10.2020
12.10.2020 13:42:30
Добрый день! Подскажите пожалуйста, где ошибка. вроде по учебнику все делаю. но по клику не появляется message
local stopped = false; function OnStop() stopped = true; return 3000; end
--data table local data_table;
--main ----------------------------------------------------------------------- function main()
--create window and table data_table = AllocTable();
end --main end -----------------------------------------------------------------------
-- Функция обрабатывает события в таблице function OnTableEvent(data_table, msg, par1, par2) -- Если был клик левой кнопкой if msg == QTABLE_LBUTTONDBLCLK then -- Если это общий стоп if par1 == 1 -- Номер строки and par2 == 1 then -- Номер колонки -- Вызываем необходимую функцию message('message 1') else if par2 == 2 then -- Вызываем необходимую функцию message('message 2') end end end end
Дело в том, что в приведенном вами скрипте, отсутствует бесконечный цикл, не позволяющий скрипту завершиться. Из-за этого, вместо того, чтобы работать и ждать появления событий, скрипт выполняется один раз и останавливается.
Пример:
Код
local stopped = false;
function OnStop()
stopped = true;
return 3000;
end
--data table
local data_table;
--main
-----------------------------------------------------------------------
function main()
--create window and table
data_table = AllocTable();
AddColumn(data_table, 1, 'Колонка №1', true,QTABLE_STRING_TYPE,14)
AddColumn(data_table, 2, 'Колонка №2', true,QTABLE_CACHED_STRING_TYPE,14)
AddColumn(data_table, 3, 'Колонка №3', true,QTABLE_STRING_TYPE,14)
SetTableNotificationCallback(data_table, OnTableEvent)
CreateWindow(data_table);
SetWindowCaption(data_table, 'Table 1');
SetWindowPos(data_table, 1000, 150, 400, 200);
InsertRow(data_table, -1);
SetCell(data_table, 1, 1, 'Клик 1 1');
SetCell(data_table, 1, 2, 'Клик 1 2');
SetCell(data_table, 1, 3, 'Клик 1 3');
InsertRow(data_table, 2);
SetCell(data_table, 2, 1, 'Клик 2 1');
SetCell(data_table, 2, 2, 'Клик 2 2');
SetCell(data_table, 2, 3, 'Клик 2 3');
-- бесконечный цикл (пока stopped == false)
while stopped~=true do
sleep(500)
end
end
--main end
-----------------------------------------------------------------------
-- Функция обрабатывает события в таблице
function OnTableEvent(data_table, msg, par1, par2)
-- Если был клик левой кнопкой
if msg == QTABLE_LBUTTONDBLCLK then
-- Если это общий стоп
if par1 == 1 -- Номер строки
and par2 == 1 then -- Номер колонки
-- Вызываем необходимую функцию
message('message 1')
else
if par2 == 2 then
-- Вызываем необходимую функцию
message('message 2')
end
end
end
end
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
09.01.2021 14:29:44
При нажатии клавиш с кодами 107 (+), 109 (-), 111 (/) на цифровом блоке клавиатуры не работают события QTABLE_CHAR и QTABLE_VKEY.
Надо делать так, как надо. А как не надо - делать не надо.