Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Resultado ModalResult de un Form (https://www.clubdelphi.com/foros/showthread.php?t=54888)

vejerf 02-04-2008 15:24:34

Resultado ModalResult de un Form
 
Muy buenas,
Os resumo mi problema. Tengo una aplicación con un Form principal que llama a otro form. Pues bien cuando este form secundario se cierra se tiene que actualizar el principal según se le haya dado al botón Aceptar o al botón Cancelar.
Mi intención era usar el valor ModalResult pero no me funcionaba, así que he recurrido al foro y buscando por ahí encontré un hilo de Román que resumiendo dice
Cita:

El método Close por su parte, cuando se trata de una ventana modal, lo único que hace es poner el valor de ModalResult en mrCancel.
Mi pruegunta entonces es como lo puedo hacer.

Gracias a todos.

Delphius 02-04-2008 15:47:39

Hola vejerf,
¿Podrías decirnos como es tu código?
¿Cómo que no funciona?:confused: ¿Estás guardando el valor en alguna propiedad o variable una vez que se recibe la "orden" mrXXXX?

¿Que hilo es ese?

Tal vez podamos hecharte una mano, pero me gustaría saber por lo menos el hilo en cuestión y parte de tu código.

Saludos,

Neftali [Germán.Estévez] 02-04-2008 15:50:07

Basta buscar en la ayuda de Delphi y encontrarás un ejemplo bastante claro:

Código Delphi [-]
procedure TMyDialogBox.OKButtonClick(Sender: TObject);

begin
  ModalResult := mrOK;    /// ACEPTARRRRRR
end;

procedure TMyDialogBox.CancelButtonClick(Sender: TObject);
begin
  ModalResult := mrCancel;      ////  CANCELARRRRRRR

end;

This code brings up the modal dialog from Form1 when a button is clicked.  It causes a Beep if the OK button is clicked.

procedure TForm1.Button1Click(Sender: TObject);

begin
  if MyDialogBox1.ShowModal = mrOK then           //// RECOGER EL RESULTADOOOOOOO
    Beep;

end;

vejerf 02-04-2008 15:54:29

Ante todo Delphius darte las gracias por tu colaboración.
El código que llama al Form secundario es el siguiente:
Código Delphi [-]
with TAgregarUnidadForm.create(nil) do
  try
    if ShowModal = mrOk then
    begin
      //Sentencias varias
    end;
  finally
    free;
  end;
Por otra parte en el TAgregarUnidad tengo dos botones, uno Aceptar que le asigno el valor mrOk y otro Cancelar al que le asigno mrCancel.

No sé donde puede estar el fallo, claro que voy aprendiendo Delphi sobre la marcha y no es que sea un experto.

Por otra parte el hilo de Román al que hago mención es este hilo.

Gracias de nuevo...

Delphius 02-04-2008 16:23:21

vejerf ya ¿Viste el código que muestra Neftali?

Creo que estás errado en la forma de trabajar con ventanas modales.

Este es un ejemplo de uso:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var Opcion: TModalResult;
begin
  Opcion := form2.ShowModal;
  case Opcion of
  mrOK: ShowMessage('Aceptar');
  mrCancel: ShowMessage('cancelar');
  end;
end;

Asumí que la forma está en AutoCreate. Si no es así, lo que debes hacer es crear la forma y luego mostrarla Modalmente:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var Opcion: TModalResult;
    Frm2: TForm2;
begin
  Frm2 := TForm2.Create(nil);
  Frm2.ShowModal;
  case Opcion of
  mrOK: ShowMessage('Aceptar');
  mrCancel: ShowMessage('cancelar');
  end;
end;

Saludos,

dec 02-04-2008 16:45:44

Hola,

El código que muestras vejerf parece correcto, y, la idea de que el "ModalResult" lo determinen la oportuna propiedad de los botones "Aceptar" y "Cancelar", también. Así que lo que no se entiende es que no te funcione tal como se espera. Yo, personalmente, acabo de probarlo, y, efectivamente, funciona. Por lo que no sé qué decir... sino que algo por ahí se nos escapa, pero, que, no tiene que ver con lo que discutimos, sino con alguna otra cosa.

Código Delphi [-]
uses
  Unit2;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TForm2.Create(nil) do
  try
    if ShowModal() = mrOk then
      ShowMessage('Aceptaste el diálogo')
    else
      ShowMessage('Cancelaste el diálogo');
  finally
    Free();
  end;
end;

eduarcol 02-04-2008 16:53:33

Yo pienso que mientras Vejerf no nos muestre el codigo de los botones del formulario modal no podremos hacer aproximaciones al problema.

Delphius 02-04-2008 16:54:18

Tienes razón Dec, funciona. Yo empecé a hacerlo así y me arrojó excepciones:confused: Y bueno, lo hice de la forma casera:D

Es como dices, hay algo que se le está escapando a vejerf... y a nosotros...
El problema puede que venga de otro lado.

Y sería oportuno que explicase mejor que quiere decir: "no me funcionaba".:confused:

Saludos,

vejerf 02-04-2008 17:15:09

Ya creo que puedo responder el por qué tenía ese problema.

La cosa es que yo desconocía que al asignar las variables mrOk o mrCancel a los botones estos ya de por sí me cerraban el form.

Yo lo que hacía cuando pulsaba uno era llamar al método Close y según decía el hilo que nombré antes este devolvía mrCancel.

Al final el fallo estaba en mi desconocimiento sobre la forma de proceder de estas variables o métodos (mrOk/mrCancel)... ya no sé si son una cosa u otra...

Muchas gracias por vuestra ayuda... sin vuestras respuestas creo que podía estarle dando vueltas una y otra vez sin llegar a ninguna conclusión... :D

Delphius 02-04-2008 17:30:30

Cita:

Empezado por vejerf (Mensaje 277026)
Ya creo que puedo responder el por qué tenía ese problema.

La cosa es que yo desconocía que al asignar las variables mrOk o mrCancel a los botones estos ya de por sí me cerraban el form.

Yo lo que hacía cuando pulsaba uno era llamar al método Close y según decía el hilo que nombré antes este devolvía mrCancel.

Al final el fallo estaba en mi desconocimiento sobre la forma de proceder de estas variables o métodos (mrOk/mrCancel)... ya no sé si son una cosa u otra...

Muchas gracias por vuestra ayuda... sin vuestras respuestas creo que podía estarle dando vueltas una y otra vez sin llegar a ninguna conclusión... :D

Me alegro que entiendieras como se usa y logres descubrir el fallo.
Para sacarte la duda, mrXXX no son ni variables ni métodos. Son CONSTANTES.

Saludos,


La franja horaria es GMT +2. Ahora son las 09:55:19.

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