Инструменты пользователя

Инструменты сайта


bbdocuviews

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
Следующая версия Следующая версия справа и слева
bbdocuviews [2014/03/18 13:12]
admin created
bbdocuviews [2014/11/21 17:09]
admin
Строка 13: Строка 13:
  - открыть отображение в окне (документе).   - открыть отображение в окне (документе). 
  
-Мы рассмотрим последний метод. Он обращается к StdDialog.Open, который проделывает следующие вещи. +Мы рассмотрим последний метод. Он обращается к StdDialog.Open, который проделывает следующие вещи: 
-1. Устанавливает внутренние флаги открытия окна в зависимости от комбинации входных параметров. Открытие может завершиться, если такой локатор уже открыт в каком-то окне. + 
-2. Проверяет, является ли отображение документом Documents.Document. Именно это указывает на документоориентированность каркаса. Каркас открывает в окне отображение только документа. +Устанавливает внутренние флаги открытия окна в зависимости от комбинации входных параметров. Открытие может завершиться, если такой локатор уже открыт в каком-то окне. 
-3. Создает экземпляр документа, настраивает секвенсор и передаёт документ в фабрику Windows.Directory. Работу фабрики мы  рассмотрим отдельно.+Проверяет, является ли отображение документом Documents.Document. Именно это указывает на документоориентированность каркаса. Каркас открывает в окне отображение только документа. 
 +Создает экземпляр документа, настраивает секвенсор и передаёт документ в фабрику Windows.Directory. Работу фабрики мы  рассмотрим отдельно. 
  
 === Модуль Windows === === Модуль Windows ===
Строка 50: Строка 52:
 Внутри RestoreRoot вызывается рекурсивная процедура RestoreFrame, которая обходит дерево фреймов и для каждого привязанного к фрейму отображения вызывает метод v.Restore. Именно в этом месте отображения производят операции вывода в пространство отображения. Внутри RestoreRoot вызывается рекурсивная процедура RestoreFrame, которая обходит дерево фреймов и для каждого привязанного к фрейму отображения вызывает метод v.Restore. Именно в этом месте отображения производят операции вывода в пространство отображения.
  
-Теперь самое интересное. Перед вызовом RestoreFrame открывается буфер порта, а после - закрывается. Это необходимо для накопления выводимых отображениями данных в буфере, который затем одномоментно "выбрасывает" их на экран или другое устройство отображения.+Теперь самое интересное. Перед вызовом //RestoreFrame// открывается буфер порта, а после - закрывается. Это необходимо для накопления выводимых отображениями данных в буфере, который затем одномоментно "выбрасывает" их на экран или другое устройство отображения. 
 + 
 +=== Корневой фрейм === 
 + 
 +Это фрейм, находящийся на вершине дерева фреймов. С него начинается построение дерева, поэтому для обозначения корня есть специальный тип //Views.RootFrame//. Поскольку корневой фрейм нельзя встраивать посреди других фреймов, то в процедуре //Views.InstallFrame// стоит проверка типа фрейма. 
 + 
 +Перед тем, как построить дерево фреймов, требуется связать корневой фрейм с его отображением. Связывание производится процедурой ''Views.SetRoot''. Сигналы от окна пойдут именно в это отображение, и далее к другим видимым отображениям. Корневое отображение отличается от других тем, что его метод GetNewFrame возвращает фрейм корневого типа. Таким образом, невозможно спутать назначение этого отображения. 
 + 
 +Фрейм является маппером порта, а маппер, согласно паттерну //Carrier-Rider-Mapper//, требует для своей работы бегунок (Rider) и носитель (Carrier). Бегунком здесь является //Ports.Rider//, а носителем //Ports.Port//. При подключении фрейма к порту методом ConnectTo, для фрейма создаётся экземпляр бегунка. Объект порта уже должен быть создан платформенными средствами (его нельзя создавать иначе, ведь порт является абстракцией устройства вывода), при этом порту назначаются единицы измерения на устройстве и его габариты (ширина и высота) в единицах измерения. 
 + 
 +Конечно же, для корневого отображения должен быть создан контекст, умеющий определять размеры окна. Кроме этого, потребуется проинициализировать домен отображения. И можно строить дерево. 
 + 
 +Дерево фреймов строится последовательным вызовом двух процедур: 
 +<code> 
 +Views.AdaptRoot 
 +Views.RestoreRoot 
 +</code> 
 +Здесь сначала производится адаптация всех фреймов, начиная с корневого, к прямоугольнику отсечения, каковым является окно. А затем запускается построение дерева фреймов, которое растёт при помощи вызовов ''Views.InstallFrame'' в процессе перерисовки отображения (отображения могут вставлять внутрь себя другие отображения, при этом каркас создаёт новые фреймы). 
bbdocuviews.txt · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)