Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Oberon
Перезагрузить страницу Wrapped view мерцает при прокрутке колеса мыши
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
S.Yu.Gubanov S.Yu.Gubanov вне форума
Member
 
Сообщений: 587
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2002
По умолчанию Wrapped view мерцает при прокрутке колеса мыши - 25.07.2005, 19:56

Понял почему wrapped view мерцает при прокрутке колеса мыши.
Вот смотрите:

Код:
PROCEDURE (v: View) HandleCtrlMsg (f: Views.Frame; VAR msg: Controllers.Message; VAR focus: Views.View);
    
  VAR tn: ARRAY 1024 OF CHAR;
  
  PROCEDURE Print (IN s: ARRAY OF CHAR);
  BEGIN StdLog.Int(v.era); StdLog.String(") " + s); StdLog.Ln
  END Print;

  PROCEDURE Print2 (IN s: ARRAY OF CHAR; a: INTEGER);
  BEGIN StdLog.Int(v.era); StdLog.String(") " + s); StdLog.Int(a); StdLog.Ln
  END Print2;
  
BEGIN
  IF ~(
        (msg IS Controllers.TickMsg)
      OR (msg IS Controllers.PollCursorMsg)
      OR (msg IS Controllers.PollFocusMsg)
      OR (msg IS Controllers.PollOpsMsg)
      OR (msg IS Controllers.PollSectionMsg)
      OR (msg IS Controllers.RequestMessage)
    )
  THEN 
      INC(v.era);
      Services.GetTypeName(msg, tn); Print(tn);
  END;
  WITH msg: Controllers.WheelMsg DO Print2("WheelMsg", msg.nofLines) ELSE END;
  focus := v.inner    (* forward all controller messages to wrapped view *)
END HandleCtrlMsg;
где View - это обертка (из стандартного примера оберток).
Запускаем на выполнение и начинаем крутить колесом мыши.
В логе видим следующее:
Цитата:
27) WheelMsg 3
28) Controllers.ScrollMsg
29) Controllers.ScrollMsg
30) Controllers.ScrollMsg
30) WheelMsg 12
31) Controllers.ScrollMsg
32) Controllers.ScrollMsg
33) Controllers.ScrollMsg
34) Controllers.ScrollMsg
35) Controllers.ScrollMsg
36) Controllers.ScrollMsg
37) Controllers.ScrollMsg
38) Controllers.ScrollMsg
39) Controllers.ScrollMsg
40) Controllers.ScrollMsg
41) Controllers.ScrollMsg
42) Controllers.ScrollMsg
42) WheelMsg 9
43) Controllers.ScrollMsg
44) Controllers.ScrollMsg
45) Controllers.ScrollMsg
46) Controllers.ScrollMsg
47) Controllers.ScrollMsg
48) Controllers.ScrollMsg
49) Controllers.ScrollMsg
50) Controllers.ScrollMsg
51) Controllers.ScrollMsg
52) Controllers.MarkMsg
То есть после того как пришло сообщение WheelMsg с msg.nofLines = 12, после него 12 раз приходит сообщение ScrollMsg, а значит перерисовка идет 12 раз. Еще бы-то это не мерцало. Конечно мерцать будет!

Теперь осталось придумать как это победить...
Ответить с цитированием
  (#2 (permalink)) Старый
S.Yu.Gubanov S.Yu.Gubanov вне форума
Member
 
Сообщений: 587
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2002
По умолчанию Re: Wrapped view мерцает при прокрутке колеса мыши - 26.07.2005, 01:23

Цитата:
Originally posted by S.Yu.Gubanov
[b]...Теперь осталось придумать как это победить...
Я был не внимателен. Оказывается решение уже было предложено:
Takun
Добавлено: Ср Май 18, 2005 9:06
http://www.progz.ru/forum/viewtopic.php?t=...er=asc&start=15

Осталось только немного его модифицировать:
Код:
PROCEDURE (v: View) HandleCtrlMsg* (f: Views.Frame; VAR msg: Controllers.Message; VAR focus: Views.View); 
  VAR scrlMsg: Controllers.ScrollMsg;
BEGIN 
  WITH msg: Controllers.WheelMsg DO
    msg.done := TRUE; scrlMsg.op := msg.op; scrlMsg.vertical := TRUE;
    WHILE msg.nofLines > 0 DO
      v.inner.HandleCtrlMsg(f, scrlMsg, focus);
      DEC(msg.nofLines)
    END
  ELSE
    (* ignore *)
  END; 
  focus := v.inner;
END HandleCtrlMsg;
я добавил цикл WHILE msg.nofLines > 0 DO... это чтобы скроллинг был на нужное количество линий.
Ответить с цитированием
  (#3 (permalink)) Старый
S.Yu.Gubanov S.Yu.Gubanov вне форума
Member
 
Сообщений: 587
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2002
По умолчанию Re: Wrapped view мерцает при прокрутке колеса мыши - 08.01.2006, 00:33

Мерцание при прокрутке колеса мыши побеждено!
Надо было всего лишь разрешить битмаповый скролинг...
Код:
  PROCEDURE (v: View) HandleViewMsg (f: Views.Frame; VAR msg: Views.Message);
  BEGIN
    WITH msg: Views.ScrollClassMsg DO msg.allowBitmapScrolling := TRUE
    ELSE
    END
  END HandleViewMsg;
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
View Sonic E655 mc-axmed Мониторы 5 26.11.2011 10:11
Как отменить стандартный обработчик событий для колеса мыши Бармаглот Visual C++ 5 11.12.2010 16:24
Курсор мыши двигается сам по себе в состоянии покоя мыши. OSS Любые вопросы от новичков 3 30.12.2008 12:06
В программе word при прокрутке документа размазывается изображение. svetiks Любые вопросы от новичков 1 24.03.2008 14:31
Как апдэйтить view sun_flower SQL 3 09.02.2007 15:32
List View в VBA Kat Visual Basic 2 29.12.2005 11:32
Несколько view для документа imported_Vika Visual C++ 2 24.08.2004 14:07
Что сложного в document view в MFC yaro Visual C++ 5 23.08.2004 10:24
Перемещение по списку с помощью колеса мыши Anonymous C++ Builder 1 25.03.2004 11:28
Перерисовка фона при прокрутке окна с приложением imported_MIX C++ Builder 5 16.02.2004 12:39
Утечка памяти при прокрутке картинок в Grid Anonymous Delphi 1 12.09.2003 14:30



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов