1) Объявляете свое свойство:
## Код:
```
MODULE MyMod;
  Prop* = POINTER TO RECORD (Properties.Property)
    opt0: INTEGER; opt1: BOOLEAN ....
  END;
(* Для каждого из полей свойства объявляете уникальную константу *)
CONST
  opt0 = 0;
  opt1 = 1;
  ...
(* У Properties есть поле valid: SET, которое определяет, какие из полей данного свойства корректны. Например, {opt0,opt1} - все корректны.
Аналогичные поля known и readOnly используются при показе диалога, определяют, как показывать эл-ты управления для данных полей *)

(* Затем задается операция сравнения для наших свойств. Сравниваются только поля, корректные у обоих переменных.
p.valid после выполнения определяет равные поля *)
PROCEDURE (p: Prop) IntersectWith* (q: Properties.Property; OUT equal: BOOLEAN);
  VAR valid: SET;
BEGIN
  WITH q: Prop DO
    valid := p.valid * q.valid;
    equal := TRUE;
    IF p.opt0 # q.opt0 THEN 
      EXCL(valid, opt0) 
    END;
    IF p.opt1 # q.opt1 THEN
      EXCL(valid, transparent)
    END;
    IF p.valid # valid THEN 
      p.valid := valid;
      equal := FALSE 
    END
  END
END IntersectWith;

(* Затем в процедуре HandlePropMsg нашего отображения обеспечиваем считывание/установку тех свойств, каких надо.
В том числе своих собственных *)

| msg: Properties.PollMsg DO
... (* создаем и инициализируем  наш prop *) ...
Properties.Insert(msg.prop, prop); (* цепляем к сообщению наш prop *)

| msg: Properties.SetMsg DO
  p := msg.prop;
  WHILE p # NIL DO (* смотрим, какие свойства прицеплены к сообщению *)
    (* какие умеем, принимаем *)
    WITH p: Prop DO
      (* применяем свое родное *)
    | (* применяем какие-то другие, если нужно *)
    ELSE
    END;
    p := p.next
  END
```


2) Создаем диалог, пишем процедуру его инициализации.
## Код:
```
PROCEDURE InitDialog;
  VAR p: Properties.Property;
BEGIN
  Properties.CollectProp(p); (* Собираем все свойства текущего отображения *)
  WHILE (p # NIL) & ~(p IS Prop) DO
    p := p.next
  END;
  IF p # NIL THEN
  ... здесь устанавливаем все галочки, поля и т.п.
  END
END InitDialog;

(* Процедура, отсылающая свойства к отображению по нажатию OK *)
PROCEDURE Ok;
  VAR p: Prop;
BEGIN
  NEW(p); ... все выставляем ...
  p.valid := {те свойства. которые определены в диалоге}
  Properties.EmitProp(NIL, p)
END Ok;
```


3) Пишем в Strings той подсистемы, в которой View:
<имя модуля без имени подсистемы>.Prop	MyMod.InitDialog;StdCmds.OpenToolDialog('My/Rsrc/Dlg', 'Свойства')

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