Hola Nicolas.
No se bién el escenario en que se presenta, es decir, desde donde son abiertos los forms, si los forms compras y ventas dependen de caja, si ambos estarán abiertos, si...
Form Caja:
Código Delphi
[-]
...
implementation
uses UnitCpra, UnitVta;
procedure FormsOnOff(F1,F2: TForm; Active: Boolean);
begin
if Assigned(F1) then F1.Enabled:= Active;
if Assigned(F2) then F2.Enabled:= Active;
end;
procedure TfrmCaja.FormCreate(Sender: TObject);
begin
FormsOnOff(frmCompra, frmVenta, False);
end;
...
procedure TfrmCaja.btnAperturaCajaClick(Sender: TObject);
begin
FormsOnOff(frmCompra, frmVenta, True);
end;
procedure TfrmCaja.btnCierreCajaClick(Sender: TObject);
begin
FormsOnOff(frmCompra, frmVenta, False);
end;
procedure TfrmCaja.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Assigned(frmCompra) and Assigned(frmVenta) then
CanClose := frmCompra.Enabled and frmVenta.Enabled
else if Assigned(frmCompra) and not Assigned(frmVenta) then
CanClose := frmcompra.Enabled
else if not Assigned(frmCompra) and not Assigned(frmVenta) then
CanClose := frmVenta.Enabled;
end;
Para lo cuál
frmCaja debe incluir las unidades de los forms compra y venta.
El motivo de tanta comprobación es por que desconozco si están creados ambos o puede estar creado solo uno de ellos. La razón del evento
OnCloseQuery, es que no sé si podrías volver a llamar a
frmCaja para habilitar los anteriores, lo que los dejaría desactivados. Si
frmCaja se puede llamar desde otro punto se podría quitar.
Fijate si de este modo te resulta, si no nos comentás con más detalle.
Saludos.