Pregunta

de mensaje (manejar, '? Es lo que realmente desea salir', '¿está seguro?', 1);

en este botón hay dos cosas, lo que el usuario puede hacer. Aceptar y Cancelar. ¿Qué código ¿Tengo que escribir, que el botón se cierra el programa en "ok" y termina el cuadro de diálogo, al pulsar cancelar?

¿Fue útil?

Solución

Delphi proporciona mejores soluciones para mostrar un cuadro de mensaje. Debería utilizar la función MessageDlg. El valor de retorno de la función MessageDlg (y de mensaje) indica la elección de los usuarios. Así que cuando se coloca un botón Sí en la MessageDlg, el valor de retorno será mrYes cuando el usuario presiona el botón Sí. Por lo que su código sería así:

var
  ShouldClose: Boolean;
begin
  if MessageDlg('Do you really want to quit?', mtConfirmation, 
      [mbYes, mbNo], 0) = mrYes then
    ShouldClose := True
  else
    ShouldClose := False;
end;

También desea cerrar su aplicación si los usuarios elige Sí. Cuando usted tiene una aplicación Delphi VCL normal, se puede implementar el caso de que CloseQuery Mainform, el evento CloseQuery se ejecuta cuando intenta cerrar el formulario principal (como hacer clic en el closebutton) y tiene una CanClose variable. Configuración CanClose a True significa que el MainForm es en Aceptar para cerrar, el valor false para evitar que su formulario principal de cierre:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := MessageDlg('Do you really want to quit?', mtConfirmation, 
    [mbYes, mbNo], 0) = mrYes;
end;

Otros consejos

En primer lugar, asegúrese de que los botones en el cuadro de mensaje coincide con el texto. Así que si el texto es "¿Realmente desea salir?" a continuación, los botones deben ser "Sí" y "No".

En segundo lugar, utilizar las constantes apropiadas, por lo que su código es más fácil de leer más adelante. Eso sería:

var
  Res: integer;

Res := Application.MessageBox('Do you really want to exit?', 'Are you sure?',
  MB_ICONQUESTION or MB_YESNO);

El resultado será entonces ya sea IDYES o ID NO. Así que asumiendo que la llamada está dentro de un método de su formulario principal, lo utilizaría como:

if Res = IDYES then
  Close;

Si llama desde otro lugar, también se puede llamar

if Res = IDYES then
  Application.Terminate;

Editar Por favor, también echa un vistazo a la Vista del usuario Directrices inteface en los cuadros de diálogo que se afirma:

  

confirmaciones innecesarias son molestos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top