Создаём QLua-окно, назначаем ему колбек на события QTABLE_CHAR и/или QTABLE_VKEY. Если переключиться на контрол "Edit" или "ComboBox" на панели инструментов ("Поиск инструмента", "Окно сообщений" и пр.), а затем активировать окно кликом на его заголовок, то события, назначенные раннее не работают. Чтобы заработали, нужно активировать кликом внутри окна.
Надо делать так, как надо. А как не надо - делать не надо.
Старатель написал: Создаём QLua-окно, назначаем ему колбек на события QTABLE_CHAR и/или QTABLE_VKEY. Если переключиться на контрол "Edit" или "ComboBox" на панели инструментов ("Поиск инструмента", "Окно сообщений" и пр.), а затем активировать окно кликом на его заголовок, то события, назначенные раннее не работают. Чтобы заработали, нужно активировать кликом внутри окна.
Добрый день.
Описанная ошибка будет исправлена в одной из очередных версий ПО. Приносим извинения за причиненные неудобства.
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