OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 18 Ноябрь, 2019 07:25

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Проблема вкладок
СообщениеДобавлено: Воскресенье, 04 Март, 2012 21:38 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2932
Откуда: г. Ярославль
Ситуация следующая.

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

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

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

Явный баг.

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

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

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

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

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


Вложения:
Test.7z [1007 байт]
Скачиваний: 192
Tabs.PNG
Tabs.PNG [ 25.66 КБ | Просмотров: 2428 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема вкладок
СообщениеДобавлено: Понедельник, 05 Март, 2012 18:02 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2932
Откуда: г. Ярославль
Резюме такое.

Причина заморозки дроп-листа при переключении вкладок лежит где-то вне ББ. Докопаться до истины не получилось. Скорее всего, в 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, конечно же.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB