Нашёл способ лучше, копировать модули не придётся, всё можно сделать в одном:

## Код:
```
MODULE TmpX;

   IMPORT Dialog;

   TYPE
      Form = RECORD
         x*: INTEGER
      END;

   VAR
      f1*, f2*, f3*, f4*: Form;
      forms*: ARRAY 4 OF Form;

   PROCEDURE Button1Click* (n: INTEGER);
   BEGIN
      INC(forms[n].x);
      Dialog.UpdateInt(forms[n].x)
   END Button1Click;

END TmpX.
```


Генератор форм это воспринимает.
Но кнопки на форму надо вручную надо добавлять и привязывать "TmpX.Button1Click(n)", но это не проблема, т.к. делать это нужно будет редко.

Только всё равно нужно будет копировать документы формы и заменять привязки "forms[0]" -> "forms[i]".

> -- Цитата:
> А куда пойдут эти данные?

Часть данных будет поступать извне и отображаться.

> -- Цитата:
> Согласен, вполне вероятно, что к задаче можно подойти с другой стороны, обходясь одной формой. И разруливая данные в нужные места через единые интеракторы. Возможный пример: DevInspector

Нет, нужно, чтобы состояние нескольких одинаковых устройств отображалось на экране одновременно.