Perdona, no había visto tu último post!!
Edito: champy se me adelantó
Evidentemente, el código que has puesto no te va a funcionar
(supongo que será al escribirlo en el navegador, pero por si acaso...):
Código Delphi
[-]
if (Form5 <> nil) then begin
DataModule2.queryLogin.Close;
Form5:=nil;
Form5.Close;
end;
¡¡¡pones a nil el formulario antes de destruirlo!!!!
Debe ser de la siguiente forma, incluyendo código para destruirlo, de tal forma que cuando pulses el botón TIENES que volver a crearlo:
Código Delphi
[-]
if (Form5 <> nil) then begin
DataModule2.queryLogin.Close;
Form5.Close;
Form5.Free;
Form5:=nil;
end;
o alternativamente:
Código Delphi
[-]
if (Form5 <> nil) then begin
DataModule2.queryLogin.Close;
Form5.Close;
FreeAndNil(Form5);
end;
Pero ya te digo, que lo más "elegante" es usar la opción 1 que te planteaba en el anterior post, creas el form cuando lo muestres, haces lo que sea con él (ShowModal, etc, etc...), cuando pulsas el botón ese de cerrar SÓLO llamas a Close, en el evento FormClose de este formulario cierras el DataModule, y cuando regrese del ShowModal, entonces se hace el Free.
Resumiendo:
Código Delphi
[-]
procedure TMainForm.OnClickDeMiBotónDeMostrarFormulario(Sender: TObject);
begin
with TMiFormQueNecesito.Create(nil) do begin
try
ShowModal(); finally
Free;
end;
end;
end;
procedure TMiFormQueNecesito.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DataModule2.queryLogin.Close;
end;
procedure TMiFormQueNecesito.OnButtonClick(Sender: TObject);
begin
Close;
end;
Fíjate que he separado lo que tú haces en el botón de cerrar en dos métodos FormClose y el evento de cerrar. ¿Por qué? Porque si cierras el formulario SIN pulsar el botón (por ejemplo Alt+F4), entonces no cerrarías el dataModule, y de ésta forma sí.
Una última cosa.
Si creas y destruyes formularios manualmente, te recomiendo que borres las variables que Delphi crea automáticamente al añadir un formulario nuevo al proyecto, como por ejemplo las del estilo Form1, Form2, etc... Así no te liarán, ya que estas variables las usa Delphi para crearte el formulario por tí, no para que tú lo hagas por Delphi.
Espero haberte ayudado.
Un saludo,
LoPiTaL