Porque es el comportamiento que tienen los forms.
Como sabes, realmente no los cierra, los esconde. Al hacer un show, mirando su código hace esto:
Código Delphi
[-]
procedure TCustomForm.Show;
begin
Visible := True;
BringToFront;
end;
Como ves, no modifica sus propiedades Left y Top y esto es lógico.
Imagina que creo una ventana, antes de mostrarla cambio su top y left para ponerla a mi gusto en un lugar de la pantalla y después Show lo centra en pantalla.... grrrrrr.
Se me ocurre, modificar el comportamiento de los forms así, Crea uno nuevo que se usará como base:
Código Delphi
[-]
TBaseForm = class(tform)
protected
procedure DoShow;override;
end;
implementation
procedure TBaseForm.DoShow;
begin
inherited DoShow;
end;
Guarda el .pas como UbaseForm y el form como frmBaseForm.
Ahora te vas a todos tus Forms, y donde pone:
sustituyes el "TForm" por "TBaseForm" y haces un "uses UBaseForm" de la unidad recien creada. Todos tus forms, al heredar ahora de TBaseForm, harán lo que quieres.
Saludos