Te mando un ejemplo que puedes adaptar:
Código Delphi
[-]
var
cpadre : TComponent;
begin
inherited;
if Assigned(TComponent(Self).Owner) then
begin
cpadre := TComponent(Self).Owner;
while not(cpadre is TfCobro) do
begin
cpadre := cpadre.Owner;
if cpadre = nil then Break;
end;
if Assigned(cpadre) then
begin
cds_detalle_cobro := TClientDataSet(cpadre.FindComponent('cdsFacturas'));
PageControl1.TabIndex := 3;
Self.ActiveControl := btCobrar;
btCobrar.Tag := 1;
btCobrar.Font.Color := clRed;
btCobrar.Caption := 'Cargar Factura';
end;
Igualmente te vale si haces una búsqueda recursiva de los formularios abiertos.
Yo usé un método parecido al tuyo pasando variables pero es muy rígido y lioso. Este funciona mejor y mas flexible y potente. De paso soluciona el problema de ir pasando variables recursivamente. Si lanzas una ventana desde un formulario y esta a su vez otra, el sistema sigue funcionando.
Creo que métodos de trabajo como este son los que realmente hacen que las interfaces desktop sigan siendo mucho mas útiles que las webs.