- Mensajes de logging (registro)
- Alertas
- Visualización de mensajes en la ventana de gráficos
- Cuadro de diálogo de mensajes
- Alertas sonoras
Cuadro de diálogo de mensajes
La API de MQL5 proporciona la función MessageBox para pedir interactivamente al usuario que confirme acciones o seleccione una opción para manejar una situación particular.
int MessageBox(const string message, const string caption = NULL, int flags = 0)
La función abre un cuadro de diálogo sin modelo con el mensaje (message), el encabezado (caption) y la configuración (flags) dados. La ventana permanece visible encima de la ventana principal del terminal hasta que el usuario la cierra pulsando uno de los botones disponibles (véase más adelante).
El mensaje también se muestra en el registro de expertos con la marca «Mensaje».
Si el parámetro caption es NULL, se utiliza el nombre del programa MQL como título.
El parámetro flags debe contener una combinación de banderas de bits combinadas con una operación OR ('|'). El conjunto general de banderas admitidas se divide en 3 grupos que definen:
- un conjunto de botones en el cuadro de diálogo
- imagen del icono en el cuadro de diálogo
- selección del botón activo por defecto
En la siguiente tabla se enumeran las constantes y los valores de las banderas para definir los botones del cuadro de diálogo.
Constante |
Valor |
Descripción |
|---|---|---|
MB_OK |
0x0000 |
1 botón OK (por defecto) |
MB_OKCANCEL |
0x0001 |
2 botones: OK y Cancelar |
MB_ABORTRETRYIGNORE |
0x0002 |
3 botones: Abortar, Reintentar, Ignorar |
MB_YESNOCANCEL |
0x0003 |
3 botones: Sí, No, Cancelar |
MB_YESNO |
0x0004 |
2 botones: Sí y No |
MB_RETRYCANCEL |
0x0005 |
2 botones: Reintentar y Cancelar |
MB_CANCELTRYCONTINUE |
0x0006 |
3 botones: Cancelar, Intentar de nuevo, Continuar |
En la siguiente tabla se enumeran las imágenes disponibles (que aparecen a la izquierda del mensaje).
Constante |
Valor |
Descripción |
||
|---|---|---|---|---|
MB_ICONSTOP |
0x0010 |
|
||
MB_ICONQUESTION |
0x0020 |
|
||
MB_ICONEXCLAMATION |
0x0030 |
|
||
MB_ICONINFORMATION |
0x0040 |
|
Todos los iconos dependen de la versión del sistema operativo. Los ejemplos mostrados pueden diferir en su ordenador.
Los siguientes valores están reservados para seleccionar el botón activo.
Constante |
Valor |
Descripción |
|---|---|---|
MB_DEFBUTTON1 |
0x0000 |
El primer botón (por defecto) si no se selecciona ninguna de las otras constantes. |
MB_DEFBUTTON2 |
0x0100 |
El segundo botón |
MB_DEFBUTTON3 |
0x0200 |
El tercer botón |
MB_DEFBUTTON4 |
0x0300 |
El cuarto botón |
Puede surgir la pregunta de cuál es este cuarto botón si las constantes anteriores no permiten establecer más de tres. El hecho es que entre las banderas también hay MB_HELP (0x00004000), que ordena mostrar el botón Ayuda en el cuadro de diálogo. Entonces puede convertirse en el cuarto consecutivo si hay tres botones principales. No obstante, al hacer clic en el botón Ayuda no se cierra el cuadro de diálogo, a diferencia de otros botones. Según el estándar de Windows, se puede asociar un archivo de ayuda al programa, que debe abrirse con la ayuda necesaria al pulsar el botón Ayuda. Sin embargo, los programas MQL no admiten actualmente esta tecnología.
La función devuelve uno de los valores predefinidos dependiendo de cómo se cerró el cuadro de diálogo (qué botón se pulsó).
Constante |
Valor |
Descripción |
|---|---|---|
IDOK |
1 |
Botón OK |
IDCANCEL |
2 |
Botón Cancelar |
IDABORT |
3 |
Botón Abortar |
IDRETRY |
4 |
Botón Reintentar |
IDIGNORE |
5 |
Botón Ignorar |
IDYES |
6 |
Botón Sí |
IDNO |
7 |
Botón No |
IDTRYAGAIN |
10 |
Botón Intentar de nuevo |
IDCONTINUE |
11 |
Botón Continuar |
Si el buzón de mensajes tiene un botón Cancelar, la función devuelve IDCANCEL cuando se pulsa la tecla ESC (además del botón Cancelar). Si el cuadro de mensaje no tiene botón Cancelar, pulsar ESC no tiene ningún efecto.
Llamar a MessageBox suspende la ejecución del programa MQL actual hasta que el usuario cierre el cuadro de diálogo. Por esta razón, el uso de MessageBox está prohibido en indicadores, ya que los indicadores se ejecutan en el hilo de la interfaz del terminal, y esperar la respuesta del usuario ralentizaría la actualización de los gráficos.
Además, la función no puede utilizarse en servicios, ya que no tienen conexión con la interfaz de usuario, mientras que otros tipos de programas MQL se ejecutan en el contexto del gráfico.
Cuando se trabaja en el probador de estrategias, la función MessageBox no tiene ningún efecto y devuelve 0.
Después de obtener el resultado de la llamada a la función, puede procesarlo de la forma que desee, por ejemplo:
int result = MessageBox("Continue?", NULL, MB_YESNOCANCEL);
|
La función MessageBox puede probarse utilizando el script OutputMessage.mq5, en el que el usuario puede seleccionar los parámetros del cuadro de diálogo utilizando variables de entrada y verlo en acción.
Los grupos de ajustes para botones, iconos y el botón seleccionado por defecto, así como los códigos de retorno, se describen en enumeraciones especiales: ENUM_MB_BUTTONS, ENUM_MB_ICONS, ENUM_MB_DEFAULT, ENUM_MB_RESULT. Esto proporciona una entrada visual a través de listas desplegables y simplifica su conversión a cadenas mediante EnumToString.
Por ejemplo, así se definen las dos primeras enumeraciones:
enum ENUM_MB_BUTTONS
|
El resto se puede encontrar en el código fuente.
A continuación se utilizan como tipos de variables de entrada (con comentarios de elementos que proporcionan una presentación más fácil de usar en la interfaz de usuario).
input string Message = "Message";
|
El script muestra el mensaje especificado en la ventana, junto con la configuración del cuadro de diálogo especificada. El resultado del cuadro de diálogo se muestra en el registro.
En las siguientes imágenes se muestra una captura de pantalla de la selección de opciones y el cuadro de diálogo resultante.

Cuadro de diálogo de propiedades de la ventana

Cuadro de diálogo de mensaje recibido