Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con application.messagebox (https://www.clubdelphi.com/foros/showthread.php?t=85671)

danielmj 16-04-2014 11:35:02

Problema con application.messagebox
 
Hola, después de tiempo sin entrar, vuelvo a las andanzas con delphi, así que aprovecho para saludar.

A ver tengo un formulario, que llama a otro en modo modal, este segundo formulario tiene un pequeño editor de textos. En el evento close de este, muestro un mensaje en caso de que el editor sea distinto a blanco y el usuario tiene la opcion de salir sin guardar o volver al editor y guardar los cambios para salir. El problema lo tengo cuando pulso el boton "cancelar", que tras pulsarlo, el segundo formulario (que se mostraba en modal), se cierra y no quiero que eso pase. Lo que busco es que cuando el usuario pulse sobre "cancelar", todo siga igual, es decir, devolver al usuario al editor de textos sin que haya cambios en este ni cerrando nada.

El codigo que tengo hasta ahora es este:

Código Delphi [-]
procedure TbEditor.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if memo1.Text<>'' then
    if Application.MessageBox('Si cierras sin guardar, se perderán los datos en el editor de textos'+
    chr(10)+'¿Está seguro de querer salir sin guardar?','Atención',mb_okCancel+mb_iconExclamation) = idOk then
      begin
        memo1.Text:= '';
        close
      end
    else
      exit
end;

Gracias de antemano.

Neftali [Germán.Estévez] 16-04-2014 14:34:52

Cambia:
Código Delphi [-]
  exit

Por:

Código Delphi [-]
  Action := caNone;

Estoy ahorrador en palabras... ;)

dec 16-04-2014 15:02:03

Hola,

El evento "OnCloseQuery" podría resultar aquí más conveniente que "OnClose", de manera que podría escribirse algo así:

Código Delphi [-]
procedure TForm1.FormCloseQuery( Sender : TObject; var CanClose : Boolean );
begin
  CanClose := ( Memo1.Text = '' ) or ( Application.MessageBox
  (
    'Si cierras sin guardar, se perderán los datos en el editor de textos'
     + #10#10 + '¿Está seguro de querer salir sin guardar?',
    'Atención',
    MB_OKCANCEL + MB_ICONINFORMATION
  ) = IDOK );
end;

danielmj 16-04-2014 17:16:43

Hola, el método de Neftali, ha sido perfecto, de todos modos, probaré también lo que me comentas Dec, así amplio mi "cuaderno de notas" donde tengo anotados muchos consejos y truquitos que he ido recopilando.

Gracias a los dos.


La franja horaria es GMT +2. Ahora son las 03:03:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi