Hola,
Generalmente, los formularios en que se solicita el "registro" a un usuario, se muestran de forma "modal": no permiten hacer nada en el resto de la aplicación, obligando al usuario a hacer "algo" con el formulario que le presentamos. El asunto podría quedar tal que así:
Código Delphi
[-]
begin
with TfrmUserRegistry.Create(nil) do
try
if (ShowModal() = mrOk) then
begin
end else begin
end;
finally
Free(); end;
end;
El código anterior crea, muestra y comprueba el resultado de mostrar el formulario "modalmente". Acto seguido, y, en cualquier caso, libera el formulario en cuestión. Ahora bien, tal como yo lo veo, tú deberías comprobar si el usuario proporcionó datos correctos en "El usuario aceptó". Y no hacer "nada" si "El usuario canceló".
Si el usuario "aceptó" comprobarías que los datos que ha proporcionado son válidos. Si lo son... y no quieres que dicho usuario vuelva a ver el formulario, la cosa creo que pasaría por guardar dichos datos en algún sitio. Tú mismo mencionas la base de datos de tu aplicación. Entonces, nos queda que, antes de mostrar el formulario, deberíamos comprobar si el usuario ya se "registró" antes. Algo como:
Código Delphi
[-]
begin
if not UserHaveRegistryData() then
begin
with TfrmUserRegistry.Create(nil) do
try
if (ShowModal() = mrOk) then
begin
end else begin
end;
finally
Free(); end;
end;
end;
La idea es que la función (o método) "UserHaveRegistryData()" compruebe que existe información en la base de datos (por ejemplo) que confirme que el usuario ya "registró" la aplicación. Si no lo ha hecho, le mostraremos el formulario para que lo pueda hacer, y, si lo ha hecho... no le mostramos formulario alguno.
Pero, igual es que me he perdido algo, porque, yo creo que esto que digo tú ya lo sabes... ¿No?