я, к примеру, делаю вот так.
делаю обобщающий класс потомок твинконтрол. полями которого являються фреймы, формы и прочее.
delphi Код:
TuserEngine = class(TWinControl)
.......
i_Trade : TfInterface_Trade;
i_requestPetition : Tfinterface_requestPetition;
i_Petition : TfInterface_Petition;
i_AcquireSkillList : Tfinterface_AcquireSkillList;
i_RecipeShop : Tfinterface_RecipeShop;
i_gameaccountsettings : Tfinterface_gameaccountsettings;
.....
Constructor create(AOwner:TWinControl); override;
end;
в конструкторе этого класса создаю все визуальные части
delphi Код:
constructor TuserEngine.create;
begin
inherited create(Aowner);
.....
i_Trade := TfInterface_Trade.Create(self, Aowner);
i_AcquireSkillList := Tfinterface_AcquireSkillList.Create(self, Aowner);
I_RecipeShop := Tfinterface_RecipeShop.Create(self,Aowner);
i_gameaccountsettings := Tfinterface_gameaccountsettings.Create(self, Aowner);
....
end;
в каждом интерфейсном элементе замещаю конструктор креейт своим размещая вот такие 2 записи в паблик секции.
delphi Код:
UserEngine : TWinControl;
constructor Create(SetUserEngine:TWinControl;AOwner: TComponent);
реализацией этого конструктора - являются 2 строчки
delphi Код:
UserEngine := SetUserEngine;
inherited create(AOwner);
после inherited можно задать parent для данного фрейма если нужно.
допустим мы создавали userengine передавая ему параметр fmain:tformmain
тогда ьбудет выглядеть как то так
parent := (aowner as tformmain).panel222;
а далее из фрейма в фрейм обращение идет уже вот таким образом
TuserEngine(userengine).AcquireSkillList.blablabla
TuserEngine(userengine).I_RecipeShop.blablabla
ну и т.д.
таким образом создавая один юзеренджин мы автоматически оздаем кучу интерфейсных частей и они автоматически связываються между собой посредством поля userengine:twincontrol;
ну и естественно в деструкторе юзеренджина незабываем разрушать все созданные элементы