Hmm..
Baue deine Forms um!
Verschiebe alles, was Du aktuell zur Aufbereitung im OnCreate machst in eine eigene Function (z.B. ExecuteWork), welche die Arbeit macht.
in deinem Buttonclick kommt dann nur noch
Delphi-Quellcode:
if Form3=nil then
begin
Form3 := TForm3.Create( Self );
end;
Form3.Show;
Form3.ExecuteWork;
Wenn die Form dann geschlossen (Close) wird, ohne Free, würde diese durch das show einfach nur wieder visible gemacht und das ExecuteWork würde die Datenaufbereitung durchführen.
Das Close setzt (wenn nicht caFree im OnClose gesetzt wird) die Form nur auf Visible := False.
Dem ExecuteWork könntest Du noch weitere Parameter mitgeben, so dass sich das Form3 vielleicht gar nicht am Form1 bedienen muss, sondern komplett autark arbeitet.