Parece que el compañero se quedó con el error, despues de 3 semanas supongo que lo habrá solucionado; tambien puede darse el caso de que lo haya "postpuesto".
Reuniendo todo lo dicho, sin entrar en más debates, una solución completa sería:
Código Delphi
[-]
procedure TFrmMDI.Toolbutton1Click(Sender:Tobject);
begin
if not Assigned(FrmCliente) then
FrmCliente := TfrmCliente.Create(Application)
else
FrmCliente.BringtoFront;
end;
procedure TFrmCliente.FormClose(...var action:TCloseaction);
begin
action := cafree;
FrmCliente := nil;
end;
Ventajas de este método:
- En la ventana de facturas se puede usar datos de Frmclientes de forma cómoda:
Código Delphi
[-]
if assigned(frmcliente) then
ShowMessage(frmCliente.Loquesea);
- No necesitamos hacer un bucle para encontrar una ventana, porque tenemos sus referencias Frmclientes, FrmFacturas, etc.
- Solo permitimos una ventana abierta de cada tipo al mismo tiempo. En algunos casos es una desventaja, en otros una ventaja, depende de la filosofía que se quiera seguir.
El método de
kesu si tiene un pequeño error, pero al haber sido escrito de memoria, demasiado bien está. Por otra parte, es "la otra filosofía" para trabajar con ventanas MDI, ese método si permite tener varias ventanas FrmClientes abiertas al mismo tiempo, pero tambien tiene sus inconvenientes. Si interesa ese método, pregunten.
Lo que sí es muy importante es
no mezclar ambos métodos, porque tendríamos Access Violation, Abstract Error y otras muchas excepciones nada obvias de localizar
Saludos