Столкнулся с тем, что при разработке компонентов есть published свойства, в которые заносится некоторая информация. И вот вопрос – как передать эту информацию во внутренний модуль компонента?
Подробно проблему описал на 2 форумах
–How to avoid using GlobalVars in components development?
–Как передать данные из одного юнита в другой при разработке компонента?
Вот скриншот структуры проекта, демонстрирующего проблему
Проблема в том, чтобы передать данные из поля Somefield в экземпляр класса, описанного во внутреннем модуле компонента uAdditional
Решение
Вот, решение, предложенное на форуме UniGUI и оно мне понравилось – достаточно элегантное.
uAdditional Расширяем класс TfAdditional через поле…
1 2 3 4 5 6 7 8 |
TfAdditional = class(TForm) private { Private declarations } FSomeComponent: TSomeComponent; public { Public declarations } Constructor Create(aSomeComponent: TSomeComponent); end; |
uAdditional Дописываем конструктор TfAdditional через override
1 2 3 4 5 6 |
constructor TfAdditional.Create(aSomeComponent: TSomeComponent); begin inherited Create(Application); FSomeComponent:= aSomeComponent; ShowMessage(FSomeComponent.SomeField); end; |
uSomeComponent_BPL При создании экземпляра класса TfAdditional передаем туда ссылку на главный компонент
1 2 3 4 5 6 7 8 9 |
procedure TSomeComponent.CreateAdditionalForm; var AdditionalForm:TfAdditional; begin AdditionalForm:=TfAdditional.Create(Self); end; |