Перестают работать события SetTableNotificationCallback

Страницы: 1
RSS
Перестают работать события SetTableNotificationCallback
 
Создаём QLua-окно, назначаем ему колбек на события QTABLE_CHAR и/или QTABLE_VKEY.
Если переключиться на контрол "Edit" или "ComboBox" на панели инструментов ("Поиск инструмента", "Окно сообщений" и пр.), а затем активировать окно кликом на его заголовок, то события, назначенные раннее не работают. Чтобы заработали, нужно активировать кликом внутри окна.
Надо делать так, как надо. А как не надо - делать не надо.
 
Старатель,
проблема изучается. Постараемся в ближайшее время дать ответ.
 
Цитата
Старатель написал:
Создаём QLua-окно, назначаем ему колбек на события QTABLE_CHAR и/или QTABLE_VKEY.
Если переключиться на контрол "Edit" или "ComboBox" на панели инструментов ("Поиск инструмента", "Окно сообщений" и пр.), а затем активировать окно кликом на его заголовок, то события, назначенные раннее не работают. Чтобы заработали, нужно активировать кликом внутри окна.
Добрый день.

Описанная ошибка будет исправлена в одной из очередных версий ПО.
Приносим извинения за причиненные неудобства.
 
Добрый день! Подскажите пожалуйста, где ошибка. вроде по учебнику все делаю. но по клику не появляется 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();

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');



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
 
При нажатии клавиш с кодами 107 (+), 109 (-), 111 (/) на цифровом блоке клавиатуры не работают события QTABLE_CHAR и QTABLE_VKEY.
Надо делать так, как надо. А как не надо - делать не надо.
 
Старатель, здравствуйте.

Действительно, наблюдаем подобные эффекты на своей стороне.
Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
 
Добрый день,
     
      Мы постараемся исправить описанную в данном инциденте ошибку в       одной из очередных версий программы.
      Приносим извинения за причиненные неудобства.
Страницы: 1
Читают тему
Наверх