In the thread you can do a new implementation of constructor
where you will pass all the data that it needs, so as to be independent of the form, which when destroyed, will not compromise Thread execution.
It looks like this:
interface
TRelatoriorThread = class(TThread)
public
constructor Create(const aParam1: string; aParam2: Integer...);
end;
implementation
constructor TRelatoriorThread.Create(const aParam1: string; aParam2: Integer...);
begin
inherited Create;
FParam1 := aParam1;
FParam2 := aParam2;
...
end;
So you prepare the thread and it runs independently of the object that started it, it could be form, datamodule or anything else that might ever exist.