22 Votos

Delphi/Lazarus: Resultado de ShowModal

Consejo de Stefan Trost | 28/02/2024 a las 22:36

ShowModal muestra una ventana y espera hasta que se cierre. Hasta el cierre, no podrás interactuar con ninguna otra ventana de la aplicación. Lo que muchos no saben: puede definir un valor de resultado al cerrar el formulario ShowModal, que luego podrá evaluar cómodamente en su programa. 

Por ejemplo, para comprobar en qué botón ha hecho clic el usuario.

Ejemplo

Echemos un vistazo a un ejemplo sencillo que demuestra esto. Nuestro primer formulario es Form1 y queremos mostrar una segunda ventana modal (Form2) usando ShowModal.

En Form2 hemos colocado dos botones a los que les hemos asignado el siguiente código:

procedure TForm2.Button1Click(Sender: TObject);
begin
  ModalResult := 1;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  ModalResult := 2;
end;

En Form1, mostramos este formulario con ShowModal:

procedure TForm1.Button1Click(Sender: TObject);
var
  k: integer;
begin
  // Example 1
  k := Form2.ShowModal;
  if k = 1 then ShowMessage('¡Se hizo clic en el botón 1!');
  if k = 2 then ShowMessage('¡Se hizo clic en el botón 2!');

  // Example 2
  if Form2.ShowModal = 1 then begin
    ShowMessage('¡Se hizo clic en el botón 1!');
  end;
end;

El valor que le hemos asignado a ModalResult en los procedimientos ButtonClick es el resultado de la llamada ShowModal. Al mismo tiempo que configuramos ModalResult en un valor distinto de cero, el formulario se cierra automáticamente.

En el ejemplo, en el código de Form2, configuramos ModalResult en 1 con Button1 y en 2 con Button2. Entonces, podemos verificar en el código de Form1 en qué botón se hizo clic en Form2 y podemos mostrar los mensajes correspondientes para nuestro ejemplo.

Botones de ModalResult 

Además de este método, también es posible aplicar directamente uno de los ModalResults estándar a nuestros botones. Para esto, los botones tienen la propiedad "ModalResult" que podemos establecer (por ejemplo a través del Inspector de Objetos) en mrOK, mrCancel, mrYes o mrNo como ejemplo.

Si hemos preparado un botón de esta forma, podemos recuperar el resultado de la siguiente manera:

if Form2.ShowModal = mrOk then begin
   ShowMessage('¡Se hizo clic en el botón con mrOk!');
end;

Entonces, si un usuario ha hecho clic en el botón con la propiedad ModalResult = mrOK, el formulario respectivo se cierra automáticamente y automáticamente nos devuelve mrOk como resultado. Y esto sin que tengamos que cambiar ninguna otra propiedad del botón ni asignar ningún evento o código al botón. Además, podemos ver en el valor de retorno de ShowModal en qué botón hizo clic el usuario.

ResponderPositivoNegativo

Sobre el Autor

AvatarPuede encontrar software de Stefan Trost en la pagina es.sttmedia.com. ¿Necesita un software individual según sus propios requisitos? Escribenos: es.sttmedia.com/contacto
Ver Perfil

 

Temas Relacionados

PHP: Guardar Resultado de MySQL en Array

Información | 0 Comentarios

Aviso Importante

Por favor tenga en cuenta: Las contribuciones publicadas en askingbox.com son contribuciones de los usuarios y no deben reemplazar el asesoramiento profesional. No son verificados por independientes y no reflejan necesariamente la opinión de askingbox.com. Aprende más.

Participar

Haga su propia pregunta o escriba su propio artículo en askingbox.com. He aquí cómo.