Parece que he conseguido resolver mi problema metiendo el calculo en un hilo. (teniendo cuidado que no llamar a componentes visuales, o utilizar syncronice para ello.
Por si le sirve a alguien, esto es lo que hice. (si es incorrecto agradezco me saquen del error.).
Código Delphi
[-]
ProgressFrame1.Label1.Text := 'Realizando cálculos, por favor espere...';
ProgressFrame1.Visible := true;
ProgressFrame1.BringToFront;
Application.ProcessMessages;
TThread.CreateAnonymousThread(procedure
begin
CalculaDatos;
ProgressFrame1.Visible := false;
end).Start;