OberonCore https://forum.oberoncore.ru/ |
|
как защитить WheelMsg нажатием Ctrl? https://forum.oberoncore.ru/viewtopic.php?f=24&t=4070 |
Страница 1 из 1 |
Автор: | ___ [ Вторник, 04 Сентябрь, 2012 06:23 ] |
Заголовок сообщения: | как защитить WheelMsg нажатием Ctrl? |
Добрый день. Код: PROCEDURE (v: View) HandleCtrlMsg* (f: Views.Frame; VAR msg: Views.CtrlMessage; VAR focus: Views.View); BEGIN WITH | msg: Controllers.TrackMsg DO IF HostPorts.ctrl IN msg.modifiers THEN Do1 END | msg: Controllers.WheelMsg DO IF msg.op = Controllers.incLine THEN Do2 END ELSE END END HandleCtrlMsg; сообщение TrackMsg приходит с полем modifiers, из которого потом можно узнать была ли нажата клавиша контрол. У сообщения WheelMsg такого поля нету, нужна реакция на скролинг при нажатом контроле. обычный сролинг (тут: кручение колесом, а не прокрутка текста) игнорировать. Как это можно сделать? Смотрел в Controller, так и не понял как заполняются modifiers у сообщений... |
Автор: | Иван Денисов [ Вторник, 04 Сентябрь, 2012 07:42 ] |
Заголовок сообщения: | Re: как защитить WheelMsg нажатием Ctrl? |
Используйте для этого f.Input(x, y, m, isDown);. Вот такой пример. Код: PROCEDURE (v: View) HandleCtrlMsg* (f: Views.Frame; VAR msg: Views.CtrlMessage; VAR focus: Views.View);
VAR x, y: INTEGER; isDown: BOOLEAN; m: SET; BEGIN WITH | msg: Controllers.TrackMsg DO IF HostPorts.ctrl IN msg.modifiers THEN INC(pos); Views.Update(v, TRUE) END | msg: Controllers.WheelMsg DO f.Input(x, y, m, isDown); IF Controllers.modify IN m THEN IF msg.op = Controllers.incLine THEN INC(pos) ELSE DEC(pos) END; END; Views.Update(v, TRUE) ELSE END END HandleCtrlMsg; |
Автор: | Иван Денисов [ Вторник, 04 Сентябрь, 2012 08:31 ] |
Заголовок сообщения: | Re: как защитить WheelMsg нажатием Ctrl? |
Код: msg.done := TRUE; Еще оказывается, важно ставить вот такой флаг. Он гарантирует корректно поведение прокрутки в случае, если ваше отображение встроено в другое отображение. Чтобы сообщение повторно не обрабатывалось родительским отображением.Цитата: TYPE WheelMsg (CursorMessage)
Расширение Это сообщение посылается, когда колесо на мыши с колесом поворачивается. done: BOOLEAN Если отображение обрабатывает это сообщение, оно должно установить флаг done в TRUE. op: INTEGER Показывает, какой тип события колеса мыши произошел. Используются те же константы, что и для прокрутки, но допустимы только следующие из них: incPage, decPage, incLine and decLine. nofLines: INTEGER nofLines >= 1 Если op или icnLine, или decLine, то nofLines показывает, сколько строк должно быть прокручено. Для incPage и decPage это значение не определено |
Автор: | ___ [ Вторник, 04 Сентябрь, 2012 09:20 ] |
Заголовок сообщения: | Re: как защитить WheelMsg нажатием Ctrl? |
Иван Денисов Спасибо, заработало. сам бы не догадался%) |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |