OberonCore https://forum.oberoncore.ru/ |
|
Определение "открытости" View https://forum.oberoncore.ru/viewtopic.php?f=2&t=1054 |
Страница 1 из 1 |
Автор: | Евгений Темиргалеев [ Вторник, 01 Июль, 2008 16:41 ] |
Заголовок сообщения: | Определение "открытости" View |
Можно ли как-нибудь определить, открыт ли данный v: View в качестве корневого view в каком-нибудь окне документа? |
Автор: | Пётр Кушнир [ Вторник, 01 Июль, 2008 17:59 ] |
Заголовок сообщения: | Re: Определение "открытости" View |
перебрать все окна через Windows.dir и сравнить v c Windows.Window.doc.OriginalView()??? Или это не вариант? |
Автор: | Пётр Кушнир [ Вторник, 01 Июль, 2008 18:20 ] |
Заголовок сообщения: | Re: Определение "открытости" View |
Или ещё можно сравнить тип v.context с Documents.Context. Зная, что при открытии окна из оригинального отображения создаёься отображение-документ Documents.Document, можно предположить, что такой способ поможет. Правда неизвестно, зануляется ли v.context при закрытии окна(чтобы наверняка знать, открыто окно или уже нет), по идее должен... |
Автор: | Иван Денисов [ Понедельник, 30 Апрель, 2012 08:15 ] |
Заголовок сообщения: | Re: Определение "открытости" View |
Нашелся ли ответ на вопрос, как вы в итоге сделали проверку? Я пользовался раньше, вот такой реализацией, где-то нашел в примерах, но как оказалось она глючит, если открыто несколько окон. Код: Msg = RECORD (Models.Message)
consumed: BOOLEAN; END; PROCEDURE ShowNN* (); VAR msg: Msg; BEGIN msg.consumed := FALSE; Views.Omnicast(msg); IF ~ msg.consumed THEN NEW(v); Views.OpenAux(v, "Сеть") ELSE Views.Update(v, TRUE) END END ShowNN; PROCEDURE (v: View) HandleModelMsg (VAR msg: Models.Message); BEGIN WITH msg: Msg DO msg.consumed := TRUE END END HandleModelMsg; |
Автор: | Евгений Темиргалеев [ Понедельник, 30 Апрель, 2012 09:32 ] |
Заголовок сообщения: | Re: Определение "открытости" View |
Иван Денисов писал(а): Нашелся ли ответ на вопрос, как вы в итоге сделали проверку? Точно ответить не могу --- уже не помню в какой задаче возник вопрос.Я пользовался раньше, вот такой реализацией, где-то нашел в примерах, но как оказалось она глючит, если открыто несколько окон. 1) Где требутеся в одно "глобальное" окно, заводил глобальную переменную в модуле типа v: Views.View. Код: VAR log: TextModels.Model; ... PROCEDURE OpenLog*; BEGIN IF log = NIL THEN log := TextModels.dir.New() END; Views.OpenAux(TextViews.dir.New(log), "Журнал") END OpenLog; 2) В WorkWindows используется перебор по Windows.dir и заголовку окна. Пётр про подобный вариант говорил. А у Вас какая задача? P.S. Реализация врят ли "глючит". Та рассылка сообщений предназначена только для перерисовки вьюшек (видимых в данный момент). Невидимым сообщения не доходят, т.к. их перерисовывать не надо. Сам несколько раз напарывался на недопонимании/забывании этого момента. |
Автор: | Иван Кузьмицкий [ Четверг, 23 Октябрь, 2014 14:09 ] |
Заголовок сообщения: | Re: Определение "открытости" View |
Ещё один способ, но с другого направления. Понадобилось найти окно, в котором расположено отображение. Алгоритм такой: 1) Определить домен отображения d := v.Domain(). Поскольку домен ассоциируется с документом, то мы получим как раз домен документа. 2) У домена возьмём его секвенсор seq := d.GetSequencer(). Ведь мы знаем, что при создании окна ему назначается секвенсор домена документа (см. HosWindows.Directory.Open). 3) А дальше, остаётся перебрать все окна, начиная с Windows.dir.First() и определить окно, в котором наш секвенсор, seq = w.seq. Что касается обсуждаемой темы, то имея окно, можно легко узнать его фрейм и корневое отображение. |
Автор: | Иван Денисов [ Четверг, 23 Октябрь, 2014 20:17 ] |
Заголовок сообщения: | Re: Определение "открытости" View |
Иван, хороший пример. А кто-нибудь может написать документацию на эти загадочные сиквенсеры? А то они вон как полезны. Еще в рассылке было, что можно с помощью них отслеживать закрытие окон, и спрашивать пользователя "вы правда хотите прервать загрузку файла" и т.п. ![]() А у меня в коде выше была ошибка пропущенного ELSE. С ним не глючит. Код: PROCEDURE (v: View) HandleModelMsg (VAR msg: Models.Message);
BEGIN WITH msg: Msg DO msg.consumed := TRUE ELSE END END HandleModelMsg; |
Автор: | Иван Кузьмицкий [ Четверг, 23 Октябрь, 2014 20:29 ] |
Заголовок сообщения: | Re: Определение "открытости" View |
Я ещё сам их не понимаю |
Автор: | Илья Ермаков [ Четверг, 23 Октябрь, 2014 20:59 ] |
Заголовок сообщения: | Re: Определение "открытости" View |
Фреймворк таки просит местами очистительного редизайна... Который швейцарцы просто не успели сделать. А ещё они во многом мерялись с COM-ами всякими, так или иначе (что они явно конкурировать собирались на этом поле, видно из книги Пфистера. И позицинировались, и параллелили концепции с этими делами. Только не учли любимого занятия MS в 90-х - пока конкуренты и потребители осваивают новую игрушку и примеряются, с какого края её, такую страшную, ...., нужно готовить уже новую неведому зверюшку...) |
Автор: | Иван Кузьмицкий [ Четверг, 23 Октябрь, 2014 21:56 ] |
Заголовок сообщения: | Re: Определение "открытости" View |
Илья Ермаков писал(а): Только не учли любимого занятия MS в 90-х - пока конкуренты и потребители осваивают новую игрушку и примеряются, с какого края её, такую страшную, ...., нужно готовить уже новую неведому зверюшку...) А это же не только MS любимое занятие. Это бизнес-модель современного ИТ-майнстрима, как я считаю. Подмять под себя предметную область, завалить инструментарием, библиотеками, фреймворками и платформами. И всё, пользователи никуда не денутся, ибо готовые и бесплатные вычисления - вот они, а платить останется только за то, что всякие там SAP, MS да ораклы не успели ещё освоить. Надо брать, да поскорее, иначе конкурент не постесняется и увеличит себе норму прибыли.А швейцарцы положили, что они предоставляют только качественный, расширяемый каркас, а освоение предметной области будет возникать рыночным способом. Другая бизнес-модель, да. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |