Я предлагаю отделить данные от GUI , потому что это вызывает вашу проблему.
Если у вас есть форма, которая собирает данные от пользователя, вы должны отличать данные от формы (TForm).
Например, давайте предположим, что у вас есть некоторый экземпляр TForm и форма, которая построена из трех полей: имя пользователя, возраст и местоположение. Вы хотите, чтобы пользователь ввел эти три вещи, но когда пользователь закрывает форму, вы должны передать эти вставленные данные в некоторый объект. Форма закрывается, она освобождается, но объект сохраняется. Затем вы передаете этот объект вашему менеджеру.
Простой пример:
Это ваша запись, которая будет хранить данные
type
TGatheredData = record
Name: String[40];
Age: Byte;
Location: String[40];
end;
Ваш TForm1 может иметь дополнительный конструктор:
constructor TForm1.Create(AOwner: TComponent; var GatheredData: TGatheredData );
begin
inherited Create(AOwner);
FGatheredData := GatheredData;
//you may want to deserialize GatheredData here and show the data in your form controls
end;
Вы называете это, передаете GotedData, а затем вы показываете свою форму.
Далее при закрытии формы вы выбираете upd данные из элементов управления формы.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Self.ModalResult = mrOk then
begin
//serialize your object
FGatheredData.Name := '';//name taken from control f.e. TEdit
FGatheredData.Age := '';//name taken from control f.e. TSpinButton
FGatheredData.Location := '';//name taken from control f.e. TEdit
end;
end;
Имея эту запись данных, вы теперь можете таким же образом передать ее своему менеджеру.
Таким образом вы развязали данные от GUI и можете легко подключать свои записи к различным формам.
Просто не забудьте объявить свой тип записи во внешнем модуле и использовать этот модуль в своем модуле менеджера и модуле.
Надеюсь, это немного поможет.