Creo que el problema del escenario 1 se explica por si mismo:
Código Delphi
[-]with TForm2.Create(Self) do
try
showModal;
finally
Free;
end;
Aquí etás creando un objeto de la clase TForm2, pero ¿Es la variable Form2? Yo creo que no, sino que es una creada al vuelo por Delphi.
En los otros escenarios no te da porque al ser formularios "Autocreate"... ¡¡¡ La variable Form2 se está creando al vuelo !!!
Asi debería funcionar:
Código Delphi
[-]
If not Assigned(Form2) then
Form2 := TForm2.Create(Self);
try
Form2.showModal;
finally
Form2.Free;
end;
Saludos