showmessage messagedlg example español delphi dialog delphi-xe3 confirmation

messagedlg - delphi showmessage confirm



¿Cómo usar el diálogo de confirmación estándar de Delphi pero con la casilla de verificación "No volver a preguntarme"? (2)

En muchos cuadros de diálogo de confirmación, es útil tener dicha opción (modo rápido de deshabilitar la confirmación). Pero no puedo encontrar cómo hacer eso. No quiero diseñarlo yo mismo porque necesito que este diálogo sea estándar y no se vuelva a diseñar con cada actualización de Delphi. ¿Hay una manera simple de usar el diálogo de confirmación estándar de Delphi con dicha casilla de verificación?

ACTUALIZAR2. La biblioteca sugerida SynTaskDialog del proyecto Synopse hace un gran trabajo (todo lo que necesito y aún más), lo usaré en mis proyectos. ¡Gracias!

ACTUALIZAR. Entonces, gracias chicos por ideas. La función del sistema MessageBoxCheck es una buena solución, pero parece que no es tan estable como debería ser. En general, estoy de acuerdo en que es una buena idea usar las funciones API más recientes para proporcionar a los usuarios la mejor experiencia de interfaz de usuario del sistema operativo moderno y utilizar el diseño pasado de moda para sistemas más antiguos. Por el momento me quedo con una solución simple (el código está a continuación), pero si alguien comparte el código con soporte de UI para el sistema operativo moderno, será agradable.

function MsgDlgWithCB(const Msg,Title,CBMsg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; DefaultButton: TMsgDlgBtn; var cbDontAskAnymore: TCheckBox): TForm; var i: integer; b: TButton; y: integer; begin Result := CreateMessageDialog(Msg, DlgType, Buttons, DefaultButton) ; Result.Position := poScreenCenter; cbDontAskAnymore := TCheckBox.Create(Result); cbDontAskAnymore.Caption := CBMsg; cbDontAskAnymore.Width := 130; y := -1; for i := 0 to result.ComponentCount-1 do if result.Components[i] is TButton then begin b := TButton(result.Components[i]); b.Left := b.Left + cbDontAskAnymore.Width + 16; Result.ClientWidth := Max(Result.ClientWidth, b.Left+b.Width+16); y := b.Top+b.Height-cbDontAskAnymore.Height; end; if y<0 then y := Result.ClientHeight - cbDontAskAnymore.height - 16; Result.Caption := Title; cbDontAskAnymore.Parent := Result; cbDontAskAnymore.Top := y; cbDontAskAnymore.Left := 8; end; function MessageDlgCheckbox(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; DefaultButton: TMsgDlgBtn; var cbDontAskAnymore: Boolean; const Title: string =''Confirmation''; const CBMsg: string = ''Don''''t ask anymore''): integer; var f: TForm; c: TCheckbox; begin f := MsgDlgWithCB(Msg,Title,CBMsg,DlgType,Buttons,DefaultButton,c); try result := f.ShowModal; cbDontAskAnymore := c.Checked; finally f.free; end; end;


La funcionalidad nativa del sistema que ofrece dichas instalaciones es la API del diálogo de tareas que se presentó en Vista. Esto proporciona medios para que muestres diálogos mucho más capaces que la antigua API de MessageBox.

Si necesita soportar XP, entonces deberá crear su propio diálogo. Por ejemplo derivando de TForm y llamando a ShowModal. Si haces esto, haz que la forma sea capaz de construirse de manera dinámica. ¡No haga un formulario por mensaje que muestre!

En mi base de código, tengo mi propio contenedor de la API de diálogo de tareas. Esto detecta en versiones de tiempo de ejecución de Windows que no admiten el diálogo de tareas y recurre a un diálogo Delphi personalizado.

Con respecto a SHMessageBoxCheck, sería un poco cauteloso de tomar una dependencia de eso. De acuerdo con su documentación, no es compatible más allá de XP, y usted tiene que importarlo por ordinal. Personalmente, me preocuparía que se elimine de una versión futura de Windows. Dicho esto, MS tiene una sólida trayectoria de hacer lo que sea necesario para mantener las aplicaciones heredadas funcionando con las nuevas versiones del sistema operativo.


Puede usar nuestra unidad Open Source SynTaskDialog .

Windows proporciona un diálogo de tarea genérico disponible desde Vista / Seven. Pero no hay ninguno disponible con versiones anteriores de Windows, es decir, Windows XP o 2K.

Esta unidad (con licencia bajo una triple licencia MPL / GPL / LGPL) usará la nueva API TaskDialog en Vista / Seven, y la emulará con código Delphi puro y componentes de VCL temáticos estándar bajo XP o 2K. Admite Delphi 6 hasta XE4, y está listo para Win32 / Win64 Unicode.

Aquí está el resultado en una computadora con Windows Seven de 64 bits:

Y aquí está el mismo diálogo creado a partir de nuestro código Delphi puro emulado:

Como esta captura de pantalla se realizó en una máquina Win 7, el estilo es nativo para ese sistema operativo. Cuando la versión emulada del diálogo se ejecuta en XP, se muestra en un estilo nativo de ese sistema operativo.

Tiene su casilla de verificación "No solicitar este ajuste la próxima vez ... ¡y potencialmente mucho más!