Есть четыре модуля. Они примерно так между собой связаны:
Код:
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: Может вопрос конечно глупый, ибо такими вещами раньше не занимался и мыслил процедурно.