Vamos a ver si no es una barbaridad. Pero creo que todo proviene de la "mala" costumbre de
referirse a una instancia particular de una clase desde métodos de la propia clase.
Su tu pones:
Código Delphi
[-]
Form2 := TForm2.Create(Self);
estás creando una instancia de TForm2 que vas a asignar a la variable Form2. Pero en el OnCreate de TForm2 (no de Form2, observa la T) pones:
Código Delphi
[-]
Form2.Left := Form1.Left + 100;
Form2.Top := Form1.Top + 100;
¡Pero Form2 no ha terminado de construirse! Así que el mensaje de error:
"Object reference not set to an instance of an object"
no suena ya tan raro ¿no? Form2 aún no es una instancia!!
Omite la referencia a Form2:
Código Delphi
[-]
Left := Form1.Left + 100;
Top := Form1.Top + 100;
// Saludos