Wop!
Aunque el truco que te comenta Cadetill funciona a las 100 maravillas, aquí te dejo otra manera de hacerlo. Para mi es mejor, porque se usa un método explícito de la clase en lugar del evento OnActivate. Cuando busques en el proyecto tras dos años, te será mucho más fácil de seguir.
La ides es definir una interfaz que contenga un solo método:
Código Delphi
[-]
type IValidaForm = interface
function Valida: Boolean;
end;
El form que queremos que pueda "autovalidarse" antes de mostrarse, lo declaramos implementando la interfaz:
Código Delphi
[-]
type TForm1 = class(TForm, IValidaForm)
...
public Valida: Boolean;
..
end;
implementation
public TForm1.Valida: Boolean;
begin
Result := MisCondiciones;
end;
Ahora solo nos queda controlar la validación desde el form "padre":
Código Delphi
[-]
procedure TFormPadre.MuestraHijo;
begin
with TForm1.Create(Self) do
begin
try
if Valida then
ShowModal;
finally
Free;
end;
end;
end;
Esto mismo lo podrías hacer sin interfaz, simplemente creando el método Valida en el form. La potencia que te da este mecanismo aparece cuando necesitas que varios forms tengan este comportamiento y no necesariamente tenga que derivar de una misma clase. Puedes crear un procedimiento para crear los forms:
Código Delphi
[-]
function CreateValidaForm(FormClass: TFormClass): TForm;
var
IForm: IValidaForm;
begin
Result := FormClass.Create(Self);
if Succeded(Result.QueryInterface(IValidaForm, IForm) and
IForm.Valida then
Result.ShowModal
else
FreeAndNil(Result);
end;