Есть четыре модуля. Они примерно так между собой связаны:

## Код:
```
TMessageRouter -----------------------------> TComponent
(WndProc:WinApi.WNDPROC)                         |
                   ^                             |
                   |                             \/
                   |                        TFormComponent
                   |                     /        |        \
                   |                    /         |          \
                   |                  \/         \/          \/
                   |                TForm1       TForm2       TForm3
                   |                  ^            ^             ^
                   |                    \          |            /
                   |                      \        |          /
                   |-------------------------  Главный модуль
```


* Главный модуль который создает все TForm-ы и через TMessageRouter запускает программу.

* Второй(TComponent) модуль содержит расширяемую запись TComponent.

* Третий(TFormComponent) содержит потомка этой записи TFormComponent и указатель на нее TForm = POINTER TO EXTENSIBLE RECORD(TFormComponent).

* А Четвертый(TMessageRouter), включает в себя пока две процедуры:
1. Обработки сообщений ProcMsg типа WinApi.WMDPROC.
2. Цикл по получению сообщений, такого содержания:
WHILE WinApi.GetMessage(msg, 0, 0, 0) # 0 DO
res := WinApi.TranslateMessage(msg);
res := WinApi.DispatchMessage(msg);
END;

Процедура обработки сообщений ProcMsg, должна получить сообщения типа WM_PAINT, или любую другую. И через TFromComponent, или на худой конец через TComponent, разослать всем TForm полученные сообщения.

Но суть в том,  что каждая TForm должна по разному эти сообщения обрабатывать. Например в зависимости от своего ID(идентификационного номера).

-------------------------------------------------------------------
1. Как бы это сделать?
Объявить в TComponent расширяемый метод?
Типа: PROCEDURE (VAR t: TComponent) SetParams (Params: SET), NEW, EXTENSIBLE;
Но как в каждой TForm его расширить?

2. Может саму структуру программы упростить/усложнить/перестроить?
3. И блин, как здесь по человечески можно диаграмы рисовать?

PS: Может вопрос конечно глупый, ибо такими вещами раньше не занимался и мыслил процедурно.