Was du suchst, nennt sich
Mediator-Pattern. Ich arbeite damit recht häufig privat, allerdings in Csharp: Jeder Controller hat eine Basisklasse, die wiederum einen statischen Mediator besitzt. So ist gewährleistet, dass jeder Controller dieselbe Instanz nutzt.
Kommuniziert wird klassisch, über String-Messages. Könnte man vielleicht auch mal ändern, muss man aber nicht. Jeder Controller muss sich dabei mit den Messages beim Mediator registrieren, für die er Nachrichten empfangen möchte.
Falls du ein bisschen C# kannst, kannst du dir ja mal
dieses Beispiel ansehen und versuchen, dort etwas für dich abzuleiten. Mit Delphi kann ich leider nicht dienen.