OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 27 Апрель, 2024 20:02

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




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: TextCmds, почему ShowRange с focusOnly
СообщениеДобавлено: Воскресенье, 26 Февраль, 2023 06:00 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1167
в TextCmds, во внутренней процедуре Show написано так:
Код:
TextViews.ShowRange(t, beg, end, TextViews.focusOnly);
а почему не `TextViews.any`? в документации сказано такое:
If ~focusOnly, an arbitrary frame will be taken, where a target frame takes precedence over all but a front frame, which takes precedence over all other frames. If focusOnly, only a front (or if none exists, a target) frame is taken as a reference, and no repositioning takes place if neither a target nor a front frame is found.
если я правильно прочитал, то `any` тут делает то же самое, что и `focusOnly`, но если не вышло — то ищет ещё усердней. по идее, `any` ничего тут поломать не должно. и, кстати, может быть (а может и не быть) полезно для 2.0, потому что там активация новых окон немного… ну, своеобразная.

но в общем, мне просто интересно, по каким соображениям омики здесь сказали «только фокусы!» если кто-нибудь имеет ответ или предположения — поделитесь, пожалуйста.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TextCmds, почему ShowRange с focusOnly
СообщениеДобавлено: Воскресенье, 26 Февраль, 2023 11:07 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3778
Думаю, что связано с разным механизмом поиска кадра дальше
Код:
   PROCEDURE (v: StdView) ShowRange (beg, end: INTEGER; focusOnly: BOOLEAN);
      VAR fmsg: FindFocusFrameMsg; amsg: FindAnyFrameMsg; f: Views.Frame;
   BEGIN
      IF focusOnly THEN
         fmsg.view := v; fmsg.frame := NIL; Controllers.Forward(fmsg); f := fmsg.frame
      ELSE
         amsg.frame := NIL; Views.Broadcast(v, amsg); f := amsg.frame
      END;
      IF f # NIL THEN v.ShowRangeIn(f, beg, end) END
   END ShowRange;


А так хотелось бы найти причину, почему не сразу показывается диапазон, а только со второго раза.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TextCmds, почему ShowRange с focusOnly
СообщениеДобавлено: Воскресенье, 26 Февраль, 2023 11:22 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1167
причина довольно простая: в Mdi-режиме дерево фрэймов окна строится сразу после его открытия, а в тайлере — после следующей перерисовки из главного цикла. соответственно, в тайлере после открытия окна никак невозможно показать диапазон, потому что дерева фреймов-то нет ещё, непонятно куда и как показывать. (мы с Антоном Александровичем просто как раз эту тему обсуждаем, я тоже заинтересовался и побежал за объяснениями.)

p.s.: и, кстати, по этой же причине «any» совершенно не поможет (вроде как), я был неправ в своём предположении.


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

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


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

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


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

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