Yo ese mismo problema lo he solucionado seleccionando el DBGrid de todos los del formulario que quiero exportar.
Te pongo un ejemplo de lo que uso yo para buscar los DataSet de un form, el funcionamiento es básicamente el mismo para otro tipo de objetos.
Muestro un formulario con un ListBox con este código:
Código Delphi
[-]
procedure TfSelDataSet.FormCreate(Sender: TObject);
var
I : integer;
FPadre : TComponent;
begin
if Assigned (Self.Owner) then
begin
FPadre := Self.Owner;
for I := 0 to FPadre.ComponentCount - 1 do
begin
if FPadre.Components[i] is TDataSource then
lstDataSets.Items.AddObject(TDataSource(FPadre.Components[i]).DataSet.Name, TDataSource(FPadre.Components[i]).DataSet);
end;
end;
end;
Luego llamo ese formulario en modo modal y recojo el objeto con algo así:
Código Delphi
[-]
with SYS_SDT_seleccionar_dataset.TfSelDataSet.Create(Self) do
begin
ShowModal;
if ModalResult = mrOK then
SYS_FAV_filtro_avanzado.TfFiltroAvanzado.CreateFiltro(Self,TClientDataSet(lstDataSets.Items.Objects[lstDataSets.ItemIndex])).Show;
end;
Como verás la clave está en AddObject y el Objects.
Aunque ahora que lo miro acabo de encontrarle un bug ya que también carga los DataSet de los DataSource que apuntan a los TSQLDataSet (no solo los TClientDataSet) para montar la lógica de cliente-detalle en DBX.