OberonCore
https://forum.oberoncore.ru/

Проблема вкладок
https://forum.oberoncore.ru/viewtopic.php?f=24&t=3873
Страница 1 из 1

Автор:  Иван Кузьмицкий [ Воскресенье, 04 Март, 2012 21:38 ]
Заголовок сообщения:  Проблема вкладок

Ситуация следующая.

Бросаем на форму контрол TabViews. На первой вкладке Tab1 (см. сним-эк, снимок экрана) размещаем дроп-лист и кнопку.

Теперь, внимание!

Если переключиться на вкладку Tab2, а затем вернуться на вкладку Tab1, то дроп-лист становится как бы "заморожен" и не реагирует на клики мышкой.
А вот если нажать кнопку, то он после этого размораживается и нормально работает.

Явный баг.

Протестировано на официальном дистрибутиве ББ (http://oberon.ch/zip/SetupBlackBox16-rc6.exe)

Прикладываю исходники.

В чём может быть причина? Сами пока что копаем, если что нароем - сообщим.

P.S. Поймано новое поведение. Если дроп-лист заполнить, то замораживается он всё равно, но после клика мышкой реагирует на клавиатуру и его можно раскрыть, нажав стрелку "вниз".

P.P.S. Расследование постепенно сходится в точку, озвученную однажды в viewtopic.php?p=61228#p61228

Вложения:
Test.7z [1007 байт]
Скачиваний: 485
Tabs.PNG
Tabs.PNG [ 25.66 КБ | Просмотров: 5953 ]

Автор:  Иван Кузьмицкий [ Понедельник, 05 Март, 2012 18:02 ]
Заголовок сообщения:  Re: Проблема вкладок

Резюме такое.

Причина заморозки дроп-листа при переключении вкладок лежит где-то вне ББ. Докопаться до истины не получилось. Скорее всего, в HostCFrames не учитываются какие-то нюансы поведения виндового контрола. Винапи-сообщения посылаются обычным образом, да только сам дроп-лист со сбитой фокусировкой на них не реагирует.

Решение такое. В уведомитель TabViews ставим сброс фокуса. Это помогает.

Код:
   PROCEDURE DropFocus;
      VAR c: FormControllers.Controller; v: Views.View; r: FormModels.Reader;
   BEGIN
      c := FormControllers.Focus();
      IF c # NIL THEN c.SetFocus(NIL) END
   END DropFocus;

   PROCEDURE Notifier* (tv: StdTabViews.View; from, to: INTEGER);
   BEGIN
      DropFocus
   END Notifier;


P.S. Для более общего случая можно использовать Containers.Controller, конечно же.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/