OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 25 Июнь, 2018 20:36

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




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Как заменить содержимое окна?
СообщениеДобавлено: Вторник, 13 Ноябрь, 2012 19:02 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2091
Откуда: Красноярск
При разработке последовательных GUI возник вопрос, как заменить содержимое окна на закрывая его?


Последний раз редактировалось Иван Денисов Вторник, 13 Ноябрь, 2012 19:42, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как заменить содержимое окна?
СообщениеДобавлено: Вторник, 13 Ноябрь, 2012 19:19 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2505
Откуда: Россия, Ярославль
Ну, например, если в режиме Layout выбрать через Ctrl+Пробел всю форму, а потом добавить скроллер через меню, то в окне появятся полосы прокрутки, что, в свою очередь (а также, сырцы модуля Documents) наталкивают на мысль о том, что Contollers.ReplaceViewMsg отлично работает в режиме раскладки. Насчёт других режимов неясно.

А вообще, самый простой путь писать ещё одну форму сверху и её стирать при ненадобности. Я так делал в подсистеме Wizard.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как заменить содержимое окна?
СообщениеДобавлено: Вторник, 13 Ноябрь, 2012 20:39 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2091
Откуда: Красноярск
Пётр Кушнир писал(а):
Ну, например, если в режиме Layout выбрать через Ctrl+Пробел всю форму, а потом добавить скроллер через меню, то в окне появятся полосы прокрутки, что, в свою очередь (а также, сырцы модуля Documents) наталкивают на мысль о том, что Contollers.ReplaceViewMsg отлично работает в режиме раскладки. Насчёт других режимов неясно.

А вообще, самый простой путь писать ещё одну форму сверху и её стирать при ненадобности. Я так делал в подсистеме Wizard.

Пётр, пожалуйста, напишите немного подробнее. Я скачал Wizard но не могу найти место где вы "пишете форму поверх"... помогите разобраться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как заменить содержимое окна?
СообщениеДобавлено: Среда, 14 Ноябрь, 2012 00:42 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2505
Откуда: Россия, Ярославль
О, мне конечно жутко стыдно, пушо там куча кода, который я пилил ещё в первый год знакомства с ББ.
Вообще, замена форм мне понадобилась при проигрывании визардов, то есть, это модуль Player, там есть процедура ClearThis(...) она зачищает указанную FormView, то есть, ту, которая отображена на экране в окне, по сути, win.doc.OriginalView(), а вызывается она перед размещением новой формы шага, которая сохранена в списке шагов steps, а само размещение происходит в методе Wizard.ShowStep


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как заменить содержимое окна?
СообщениеДобавлено: Среда, 14 Ноябрь, 2012 07:13 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8954
Откуда: Россия, Орёл
А ещё можно наложить на форму спец. вьюшку, которая содержит в себе список других вьюшек и показывает только одну из них? Такую вьюшку написать очень просто. Для режима разработки сделать спец. Tool-Dialog, который помогает в ней перелистывать страницы и вставлять новые. Для пустой страницы обрабатывать EditMsg с paste, забирая вставляемую вьюшку.

А дальше делаете страницами FormView-ы или что угодно...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как заменить содержимое окна?
СообщениеДобавлено: Среда, 14 Ноябрь, 2012 10:52 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2505
Откуда: Россия, Ярославль
Илья Ермаков писал(а):
А дальше делаете страницами FormView-ы или что угодно...

да, это уже следующий виток развития, сделать такое отображение, которое само знает, какую форму отобразить. А общаться с таким отображением можно с помощью сообщений Models.Message, которые проходят даже в скрытые отображения. Достаточно иметь хендл окна, или вычислять его динамически, чтобы ничего не хранить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как заменить содержимое окна?
СообщениеДобавлено: Среда, 14 Ноябрь, 2012 11:42 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2091
Откуда: Красноярск
Пока нашел вот такое решение. Меня вполне устроило. Спасибо Петру огромное!

Код:
   IMPORT Containers, Controllers, Files, FormModels,Views, Windows, FormViews, Models;

   PROCEDURE ReplaceForm*;
      VAR
         win: Windows.Window; old: FormViews.View; new: Views.View;
         wr : FormModels.Writer; m : FormModels.Model; c : Containers.Controller; w, h: INTEGER;
         sm: Containers.SetOpts;
   BEGIN
      (* Стираем все со старой формы *)
      win := Windows.dir.Focus(Controllers.frontPath);
      old := win.doc.ThisView()(FormViews.View);
      m:=old.ThisModel();
      c:=old.ThisController();
      Models.BeginModification(Models.notUndoable, m);
         c.SetOpts(Containers.layout);
         c.SelectAll(TRUE);
         c.DeleteSelection();
         c.SetOpts(Containers.mask);
      Models.EndModification(Models.notUndoable, m);
      wr := m.NewWriter(NIL); wr.Set(NIL);
      (* Открываем новую форму *)
      new := Views.OldView(Files.dir.This("Lumi/Rsrc"), "Monitor");
      sm.valid := {Containers.noSelection, Containers.noFocus, Containers.noCaret};
      sm.opts := {Containers.noSelection, Containers.noCaret};
      Views.HandlePropMsg(new, sm);
      
      old.context.GetSize(w, h);
      wr.WriteView(Views.CopyOf(new, FALSE),0,0, w, h);

   END ReplaceForm;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как заменить содержимое окна?
СообщениеДобавлено: Пятница, 16 Ноябрь, 2012 13:51 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2505
Откуда: Россия, Ярославль
Иван Денисов писал(а):
Пока нашел вот такое решение. Меня вполне устроило.
Если не секрет, в двух словах про проект, цели задачи предпосылки перспективы.
Иван Денисов писал(а):
Спасибо Петру огромное!
:)
Жаль, что тредов про конкретные задачи и проблемы так мало, ведь они намного интереснее всего остального, даже в режиме только-чтения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как заменить содержимое окна?
СообщениеДобавлено: Воскресенье, 18 Ноябрь, 2012 07:25 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2091
Откуда: Красноярск
Делаю сейчас приложение для прибора измеряющего динамику светового излучения биологических проб (биолюминометр). Задачи приложения, отправка управляющих команд, сбор данных, отображение динамики светового излучения в реальном времени, обработка, экспорт. Программу для МК прибора пишу на Оберон-7 в среде Astrobe. По окончании проекта сделаю более детальный пост с картинками того, что выходит.

Когда форма меняется первый раз, появляется сетка. Проблема решается установкой шага сетки больше, чем размер формы. Тогда все выглядит гладко.


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

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


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

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


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

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