Я попытался сделать установку размера в Restore, получил разнообразные trap'ы в процессе прорисовки. К сожалению, воспроизвести на своей машине не могу, поэтому решил спросить у вас. Насколько я понял ваш пример, у вас некий контейнер устанавливает размеры для содержащихся в нем элементов. Это позволяет вам вызывать InstallFrame.

У меня компонент не является контейнером, соответственно, он пытается изменять свой собственный, а не чужой, размер. И делает он это прямо во время прорисовки. При этом, если размер изменился, должен быть создан новый фрейм. Насколько я понял причину ошибки, после изменения размера прежний фрейм (переданный в Restore) может оказаться неправильным.
Вот как сделано у меня сейчас:
## Код:
```
PROCEDURE (v: View) Restore* (f: Views.Frame; l, t, r, b: INTEGER);
      VAR font: Fonts.Font; w, h, left: INTEGER;
   BEGIN
      (* Попробуем установить желаемый размер *)
      GetAutoSize(v, w, h);
      v.context.SetSize(w, h);
      (* Узнаем реальный размер *)
      v.context.GetSize(w, h);
      font := FontContext(v);
      left := font.StringWidth(' ') DIV 2;
      IF v.model.textValue = NIL THEN
         f.DrawSString(left, h - 2 * f.dot, Ports.black, noData, FontContext(v));
      ELSE
         f.DrawSString(left, h - 2 * f.dot, Ports.black, v.model.textValue, FontContext(v));
      END;
      f.DrawRect(0, 0, w, h, f.dot, Ports.black)
   END Restore;
```

Можете подсказать, как сделать правильно? Или это невозможно в BlackBox?