Es verdad!
Gracias Ñuñu... nunca lo hubiera adivinado...
Además, si creas más de uno, le debes asignar un nombre.
Al final queda así:
Código Delphi
[-]
procedure TFMConsultaLotes.EFTipoLoteChange(Sender: TObject);
var
tsCodigo, tsTitulo, tsIDIndice : TStrings;
i : integer;
aFiltro : TFRMFiltro;
begin
inherited;
ETituloTipoLote.Text := DMMain.DameTituloTipoLote(EFTipoLote.Text);
tsCodigo := TStringList.Create;
tsTitulo := TStringList.Create;
tsIDIndice := TStringList.Create;
try
DMMain.RellenaIndices(EFTipoLote.Text, tsCodigo, tsTitulo, tsIDIndice);
with PNLFiltro do
begin
for i := ComponentCount - 1 downto 0 do
if (Components[i] is TFRMFiltro) then
Components[i].Free;
end;
for i := 0 to tsCodigo.Count - 1 do
begin
aFiltro := TFRMFiltro.Create(PNLFiltro);
aFiltro.Name := 'FRMFiltro'+IntToStr(i + 1);
aFiltro.Parent := PNLFiltro;
aFiltro.Top := PNLFiltro.Height;
aFiltro.Align := alTop;
aFiltro.CargaCampos(tsTitulo[i], StrToIntDef(tsIDIndice[i], 0));
end;
finally
tsCodigo.Free;
tsTitulo.Free;
tsIDIndice.Free;
end;
end;