OberonCore https://forum.oberoncore.ru/ |
|
TextCmds, почему ShowRange с focusOnly https://forum.oberoncore.ru/viewtopic.php?f=23&t=6906 |
Страница 1 из 1 |
Автор: | arisu [ Воскресенье, 26 Февраль, 2023 06:00 ] |
Заголовок сообщения: | TextCmds, почему ShowRange с focusOnly |
в 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, потому что там активация новых окон немного… ну, своеобразная. но в общем, мне просто интересно, по каким соображениям омики здесь сказали «только фокусы!» если кто-нибудь имеет ответ или предположения — поделитесь, пожалуйста. |
Автор: | Иван Денисов [ Воскресенье, 26 Февраль, 2023 11:07 ] |
Заголовок сообщения: | Re: TextCmds, почему ShowRange с focusOnly |
Думаю, что связано с разным механизмом поиска кадра дальше Код: 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; А так хотелось бы найти причину, почему не сразу показывается диапазон, а только со второго раза. |
Автор: | arisu [ Воскресенье, 26 Февраль, 2023 11:22 ] |
Заголовок сообщения: | Re: TextCmds, почему ShowRange с focusOnly |
причина довольно простая: в Mdi-режиме дерево фрэймов окна строится сразу после его открытия, а в тайлере — после следующей перерисовки из главного цикла. соответственно, в тайлере после открытия окна никак невозможно показать диапазон, потому что дерева фреймов-то нет ещё, непонятно куда и как показывать. (мы с Антоном Александровичем просто как раз эту тему обсуждаем, я тоже заинтересовался и побежал за объяснениями.) p.s.: и, кстати, по этой же причине «any» совершенно не поможет (вроде как), я был неправ в своём предположении. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |