Victor_VG
Tracker Mod | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Так, судя по анализу описанного 10.05.2017 явления на форуме Far: DrKnS Fri 12 May, 2017 07:44 Цитата: Цитата: Таки ваше. Если вы хотите "<0 - message will be not displayed" - то сообщение вообще не надо выводить, а не выводить и делать waitkey c отрицательным временем, надеясь, что оно как бы сразу истечёт и сообщение закроется. Waitkey никогда логику "отрицательное время - это типа оно сразу истекло" не поддерживал, а "работало" оно только потому, что время в этом случае было представлено 32-битной величиной, при прибавлении к которой (unsigned)-1 == 4294967295 происходило целочисленное переполнение. Теперь время в этом случае 64-битное, переполнения не происходит и сообщение будет честно висеть запрошенные 49 дней и 17 часов. | IgorZ Fri 12 May, 2017 11:34 Цитата: Цитата: DrKnS Цитата: Таки ваше. Если вы хотите "<0 - message will be not displayed" - то сообщение вообще не надо выводить, а не выводить и делать waitkey c отрицательным временем, надеясь, что оно как бы сразу истечёт и сообщение закроется. Waitkey никогда логику "отрицательное время - это типа оно сразу истекло" не поддерживал, а "работало" оно только потому, что время в этом случае было представлено 32-битной величиной, при прибавлении к которой (unsigned)-1 == 4294967295 происходило целочисленное переполнение. Теперь время в этом случае 64-битное, переполнения не происходит и сообщение будет честно висеть запрошенные 49 дней и 17 часов. | "Не моё" относилось к выводу нажатой клавиши. Специально сейчас проверил с последней ночнушкой - если поставить, к примеру, 10000 и нажать клавишу до исчезновения сообщения, она таки выводится в командной строке. За пояснение относительно waitkey спасибо. | DrKnS Цитата: Цитата: IgorZ: "Не моё" относилось к выводу нажатой клавиши. Специально сейчас проверил с последней ночнушкой - если поставить, к примеру, 10000 и нажать клавишу до исчезновения сообщения, она таки выводится в командной строке. | Это тоже ваше. Я в луа понимаю, как свинья в апельсинах, но: Код: for c in seq:gmatch(".") do -- для каждой ранее нажатой клавиши if eval(mod..c,2)<0 then Keys(mod..c) | seq здесь - строка с именем клавиши, которую вы попросили waitkey() вам вернуть. Вы её посимвольно проходите и каждый символ исполняете. Что просили - то и получили. | вырисовывается следующая картина: 1) таймер работает с 64-х битным значением, и если ставить значение < 0, то с учётом того, что таймер использует беззнаковые уставки имеем в нём значение > 0x100000000, т.е.вполне положительное число и таймер считает время до его истечения, следовательно в случае отрицательной уставки в скрипте нужен обход вызова таймера: If delaytime < 0 then wait=0 else If delaytime > 0 then wait=delaytime else wait=264; end;end; - т.е. в данном месте в скрипте требуется доработка алгоритма; 2) Избежать вывода в комстроку по идее можно просто подставив в вызов Panel.Setpath() значение соответствующее закладке...
---------- Жив курилка! (Р. Ролан, "Кола Брюньон") Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti |
|