Пытаюсь в SetTableNotificationCallback научить различать различные события, такие как: - одиночное нажатие мышки - двойное нажатие мышки - одиночное нажатие мышки с нажатой кнопкой Ctrl - двойное нажатие мышки с нажатой кнопкой Ctrl
Пока возникают проблемы, и не могу понять, как их обойти. Может кто-то поделится опытом?
Сначала про мышку: Как описывалось в теме https://forum.quik.ru/messages/forum10/message13087/topic1440/#message13087 при двойном нажатии срабатывает сразу серия событий QTABLE_LBUTTONDOWN QTABLE_LBUTTONUP QTABLE_LBUTTONDBLCLK QTABLE_LBUTTONUP Это крайне неудобно, потому что если на одиночный клик совершается какое-то действие, то при двойном щелчке приходится это действие отменять. Я не специалист по Windows, но в ее настройках, есть параметр, отвечающий за скорость двойного нажатия мышки. Почему бы в QLUA не использовать этот параметр, и не проверять сначала, было ли двойное нажатие мышки, или одиночное, и уже потом возвращать окончательное событие - ОДНО. Это как пожелание к доработке.
Второе: по поводу нажатия клавиш. Например нужно обработать событие - одиночное нажатие мышки с нажатой кнопкой Ctrl Кое как я выкрутился из положения, и как только нажимается Ctrl записываю в переменную значение, что нажата Ctrl. И все дальнейшие события обрабатываю с учетом того, то Ctrl нажата. Проблема в том, что если нажать Ctrl и потом сразу отпустить, то при отпускании никакого события не срабатывает, и систем продолажет помнить, что Ctrl нажата. И следующее событие обрабатывает, как будто Ctrl нажата, хотя она давно отпущена. Просьба доработать этот вопрос каким-нибудь образом. Хотя бы сделать возврат события "отпущена клавиша", как это сделано с кнопкой мышки.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
2. По поводу второго вопроса. Вопрос изучим и вернемся через некоторое время.
По второму вопросу проблема не воспроизводится. Вот наш код:
Скрытый текст
Код
work=true
function f_cb(t_id,msg,par1,par2) --событие на нажатие клавиш
message("msg= "..msg.." par1="..par1.." par2="..par2)
if (msg==QTABLE_CHAR) and (par2==19) then --сохранить в CSV файл текущее состояние таблицы нужно нажать комбинацию клавиш Ctrl+S
message("Нажали Ctrl+S")
end
if (msg==QTABLE_VKEY) and (par2==116) then --функция принудительного обновления таблицы при нажатии клавиши Ctrl+F5
message("Нажали Ctrl+F5")
end
if msg==QTABLE_CLOSE then
OnStop()
end
end
function OnStop()
work=false
DestroyTable(t_id)
end
function main()
t_id=AllocTable()
AddColumn(t_id,1,"INT1",true,QTABLE_INT_TYPE,10)
CreateWindow(t_id)
SetWindowCaption(t_id,"Script message.")
SetTableNotificationCallback(t_id, f_cb)
tmp=InsertRow(t_id,-1)
SetCell(t_id,tmp,1,"1",1)
while work do
sleep(500)
end
end
Приведите Ваш пример при котором проблема повторяется
Sergey Denegin написал: одиночное нажатие мышки с нажатой кнопкой Ctrl
Прошу прощения, не заметили что Вы нажимаете Ctrl с клавишей мыши. Действительно, в таком варианте решить задачу в одном событии нельзя, разве что помнить предыдущие. Мы зарегистрировали пожелание на добавление события поднятия клавиш клавиатуры. Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
По первой части: мы рассмотрели Ваше пожелание. По итогам его анализа сообщаем Вам, что реализация пожелания признана потенциально целесообразной. Если по результатам дальнейшего анализа, включающего юридические аспекты, анализ на непротиворечивость с общей политикой компании, никаких возражений не возникнет, мы постараемся включить Ваше пожелание в план доработок при выпуске одной из следующих версий нашего ПО.