Hola Fernando,
¿Cuál es el error que te aparece?
Si la idea es comprobar antes si existe debes disponer de las variables para cada uno, o bien recorrer la propiedad Forms[] para determinar si existe la ventana abierta gracias a Assigned y en caso negativo recién crear.
Otro motivo de posibles problemas está en el hecho de que si defines un dueño al momento de crear un form no deberías liberarlo. Precisamente esa es la idea del dueño.
Si tu quieres liberar los forms una ves presentados recomiendo que no le asignes dueño:
Forma := TForma.Create(nil);
Y aquí aprovecho para hacer un paréntesis. Si bien es legal hacer:
Forma := TForm(Forma).Create();
Y aparentemente funciona, recuerda que estás haciendo un cast hacia una clase base. Por defecto cuando creamos un form, Delphi genera una nueva clase por cada uno: Form1 -> TForm1, Form2 -> TForm2, etc... Debería ser la propia de la propia clase y tipo al momento de crear.
Puedes hacer uso de las referencias de clases:
type
TFormClass = class of TForm;
var
miFormClass: TFormClass;
form: TForm;
begin
miFormClass := TFormClass(Forma);
Forma := miFormClass.Create(nil); // O Application si es el caso
end;
De este modo te garantizas de que se haga uso del constructor y tipo adecuado y como extra no hay moldeo.
Saludos,