Galería de interfaces de usuario escritas en MQL - página 35

 
//--------------------------
//FIRST GROUP
//--------------------------
GROUP, "Group 1",

__, CHECKBOX, "Checkbox 100",  

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 10,
//--------------------------
i, CHECKBOXES, W, 120,  END,
//--------------------------
//--------------------------------------------------------------
//1. WRITE THE NAME OF THE CHECKBOX THAT WILL BLOCK THE OTHERS:
//2. WRITE KEYWORD "BLOCKS".
//3. WRITE THE NAMES OF THE ELEMENTS (OR GROUPS) IT WILL BLOCK.
//4. PUT "END" IN THE END.
//5. OR, WRITE THE NAME OF THEIR GROUP.
//--------------------------------------------------------------
"Checkbox 100", BLOCKS, "Group 2", END,
//--------------------------------------------------------------

//--------------------------
//SECOND GROUP
//--------------------------
GROUP, "Group 2",


__, H_SLIDER, "H_Slider 1", W, 120,       S_EDIT, "Textbox 1",         W, 120, 

__, C_LIST,   "Combobox 1", W, 120,       D_LIST, "Combobox 2",        W, 120, 

__, BUTTON,   "Button 1",   W,120,        D_BUTTON, "Dialog button 1", W, 120, 

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2H, "Checkbox 100", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 

//------------------------------------------------------
 
_Y2H 是什么,是否有 _X2H ?
 
hini #: _Y2H Что это такое, и есть ли это _X2H?

Analicemos la expresión _Y2H:

  • Y es una coordenada
  • 2 significa "hacia". Indica algo.
  • H es la abreviatura de altura.

Y a Altura.

En el sistema de coordenadas, moverse desde el punto Y del objeto a lo largo de su cuerpo a una distancia igual a la altura del objeto (y_size) lleva a su punto más bajo. La coordenada Y del objeto a encajar debe descender a lo largo de la altura del objeto a encajar y terminar en su parte inferior. Es decir, debe cubrir la distancia de altura del objeto ancla, por lo que el ancla se denomina _Y2H.


2. _X2H no existe porque la coordenada X sólo se puede ajustar en el plano horizontal, no en el vertical, y H significa altura. 3. Existe un ajuste _X2W, que significa que la coordenada X se ajusta al punto X + X_SIZE (Ancho) del objeto especificado.


El tema del ajuste se tratará con más detalle más adelante.

 

Hoy terminaremos con las enumeraciones, ya que empezamos a hablar de ellas ayer.

 

Sobre el tema de las fijaciones, añadiré que existen normas estrictas y que no tiene sentido intentar experimentar con ellas ahora. Espere a una explicación más completa.

Hay bindings que funcionan por separado para grupos de elementos y los hay que funcionan con elementos individuales dentro de grupos. También hay bindings que sirven para posicionar objetos dentro de elementos (como texto o iconos).

Llegaremos a eso más adelante.

 
Реter Konow #:

Hoy terminaremos con las enumeraciones, ya que empezamos a hablar de ellas ayer.

Sin embargo, después de pensarlo detenidamente, he decidido posponer la finalización del tema de las enumeraciones. Comprender el material adicional de este tema requiere un conocimiento básico de las reglas del lenguaje, que los lectores aún no tienen.

Por ahora, sigamos familiarizándonos con los controles y las vinculaciones.

 

Hasta ahora, en la mayoría de los casos, hemos tratado con un simple botón BOTÓN. Todo el mundo sabe lo que es un botón, se explica por sí mismo. Pero vale la pena entrar en algunos detalles. Lo mismo se aplica a otros elementos con los que hemos trabajado anteriormente. Hagámoslo así: primero repasemos las principales características y funciones, toquemos todo en términos generales, y luego nos detendremos en cada elemento por separado para una consideración más detallada.

Así, un botón es un elemento interactivo que cambia de estado cuando se pulsa. En una interfaz gráfica se utiliza para diferentes propósitos. Principalmente para encender o apagar algo, pero a veces para llamar a una ventana. Variantes de aplicación de un simple botón es mucho. Es un elemento bastante universal.

¿Qué otros elementos hemos considerado? Por ejemplo, CHECKBOX. ¿Por qué necesita una casilla de verificación? Una casilla de verificación es necesaria para activar, desactivar o bloquear opciones en la configuración del programa. Si necesita elegir entre varias opciones, el elemento R_BUTTON(botón de radio) es adecuado. Pero a condición de que las opciones sean pocas.

¿Y si las opciones son muchas, pero no excesivamente? Entonces se utiliza la lista desplegable D_LIST o la lista combinada C_LIST. La diferencia entre estos dos elementos es la presencia o ausencia de un campo de entrada de texto donde el usuario puede introducir la opción deseada. D_LIST tiene un campo de este tipo, C_LISTno.

¿Y qué hacer cuando hay demasiadas opciones en el programa? Las listas desplegables resultan incómodas por su reducido tamaño. La solución son largas hojas desplazables en ventanas grandes. Puedes ver ejemplos en las ventanas de fuentes, sonidos y marcos del diseñador.

Pero, estas listas necesitan una barra de desplazamiento, porque son muy largas. Y por eso hay un elemento especial para ellas."Campo de visión" V_BOX. Un elemento simple con dos barras de desplazamiento y su propio lienzo. Por cierto, su desplazamiento es tanto vertical como horizontal. Y el tamaño del lienzo se establece automáticamente a partir del cálculo del contenido colocado.

Los elementos de la lista se denominan L_ITEM, que es la abreviatura de"List Item". Se reúnen en un grupo separado y se dibujan en el lienzo del campo de visión especificado. Cada elemento recibe el nombre de un elemento de menú u opción y se conmutan con una palabra clave SWITCH_ALL. Y para introducir la lista de elementos L_ITEM en el campo de visión general V_BOX, se utiliza la palabra clave "IN". El posicionamiento es sencillo - LEFT_TOP, 0,0,.


A continuación, vamos a ver los elementos de la lista con más detalle y en el mismo orden. Hablaremos de posicionamiento, estados, propiedades y atributos.

...Y consideraremos las opciones de aplicación en el contexto de los programas para operadores.

 

Botón ordinario: BUTTON

4 variedades de botones constructores:

Tiene un aspecto relativamente anticuado y una funcionalidad sencilla como cualquier botón clásico. Dispone de un icono.


//-------------------------------------------------------------------------------------------------------------------------------------

  • Botón interactivo I_BUTTON - botón interactivo:

Un hermoso botón interactivo que responde suavemente al cursor que pasa por encima / se aleja. Se utiliza como un botón normal, pero menos visible y en estado neutro no tiene bordes delineados. La mayoría de las veces sin texto y con un icono. Suele tener forma cuadrada.


//-------- -----------------------------------------------------------------------------------------------------------------------------

  • Botón de la barra de herramientas (como en MT4) TB_BUTTON - Botón de la barra de herramientas:

Utilizado principalmente para la barra de herramientas en la cabecera de la ventana principal. A menudo sin texto, pero con un icono y normalmente de forma cuadrada. Se pega al cursor cuando se pasa por encima. Llama a ventanas o funciones. Tiene una flecha.


//-------- -----------------------------------------------------------------------------------------------------------------------------

  • D_BUTTON - botón de diálogo:

Se sitúa en la parte inferior de los cuadros de diálogo para interactuar con el usuario. Lleva textos como "Ok", "Sí", "No", "Cancelar", "Abortar", "Continuar", "Aceptar", "Siguiente", "Anterior", "Saltar", "Confirmar", "Abrir", "Cerrar", .... y otras palabras de este género.


Puede configurar los iconos y el texto de todos los botones, así como el color de los distintos estados.

Al mismo tiempo, los botones pueden cambiar de texto e icono en función del estado. En neutro un texto o icono, y en activado es diferente.


Por ejemplo:

Todos los botones están pulsados y están en estado neutro:


Y ahora los hemos pulsado y han cambiado de texto e icono: (excepto el botón de diálogo, ya que cierra la ventana tras ser pulsado y no es necesario)


El texto del botón interactivo está superpuesto al icono, pero está diseñado así porque es posible colocar el icono y el texto dentro del botón.

 

Así, los botones pueden cambiar de texto al pulsarlos. Además, el texto y el nombre del botón son cosas diferentes. El texto para el estado neutro puede establecerse con la palabra N_TEXT, y aparecerá otro texto de usuario en lugar del nombre del botón.

Lo mismo ocurre con el icono. Puede especificar un icono para el estado neutral y para el estado activo.


Código:

NEW_WINDOW,  
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "My first window",
//------------------------------------------------------
/*POINT TO WINDOW'S ICON*/  W_ICON, "::Images\\16x16\\Smile.bmp",  
//------------------------------------------------------

//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//----------------------------------------------------------------------------------
/*WINDOW OPENS AT START*/   OPEN_ON_INIT,  /*(OOI)*/

/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  

/*MARGINS OF THE WINDOW*/   MARGINS, 40,40,/*Х, Y*/
//----------------------------------------------------------------------------------
//
//----------------------------------------------------------------------------------
//1. DECLARE A GROUP WITH AN ABSTRACT NAME  A.
//2. DECLARE A NEW ROW OF ELEMENTS IN THE GROUP WITH A SYMBOL  __, 
//3. DECLARE A BUTTON AND WRITE IT'S NAME.
//4. END GROUP WITH THE KEYWORDS  END_GROUP,
//------------------------------------------------------
GROUP, "Buttons group",

__, BUTTON,   "Button 1", W, 120,_,H, 50,   D_BUTTON, "D button 1",   W, 120,_,H, 50,

__, I_BUTTON, "I Button", W, 120,_,H, 50,   TB_BUTTON, "TB button 1", W, 120,_,H, 50, 

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 
//----------------------------
"Button 1",    N_TEXT,  "Neutral state",

"Button 1",    A_TEXT,  "Active state",

"Button 1",    N_LABEL, "::Images\\16x16\\About.bmp",

"Button 1",    A_LABEL, "::Images\\16x16\\3d bar chart.bmp",

"Button 1",    FIC,
//----------------------------

//----------------------------
"I Button",    N_TEXT,  "Neutral", 

"I Button",    A_TEXT,  "Active",

"I Button",    N_LABEL, "::Images\\16x16\\Accounting.bmp",

"I Button",    A_LABEL, "::Images\\16x16\\Address book.bmp", 

"I Button",    FIC,
//----------------------------

//----------------------------
"D button 1",    N_TEXT,  "Also Neutral",

"D button 1",    A_TEXT,  "Also Active",

"D button 1",    N_LABEL, "::Images\\16x16\\Alarm clock.bmp",

//----------------------------

//----------------------------
"TB button 1",    N_TEXT,  "TB Neutral",

"TB button 1",    A_TEXT,  "TB Active",

"TB button 1",    N_LABEL, "::Images\\16x16\\Alarm clock.bmp",

"TB button 1",    A_LABEL,  "::Images\\16x16\\Address book.bmp", 

"TB Button 1",    FIC,

//------------------------------------------------------
//FINISH THE WINDOW BY KEYWORDS END_WINDOW,
//------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------
 

Quizá una de las principales funciones de los botones sea llamar a las ventanas. Pulsa el botón en una ventana y se abrirá otra.

¿Cómo se hace esto?

De dos maneras:

  • Escribimos la palabra clave OPENS_WINDOW en las propiedades del botón y luego el nombre de la ventana a llamar.
  • O nombrar el botón igual que la ventana a la que debe llamar y ocultar el texto del botón. O sustituir el texto del botón por las palabras N_TEXT y A_TEXT.

Es importante tener en cuenta lo siguiente: la coincidencia de los nombres de los botones o elementos de menú con los nombres de las ventanas hace que éstas se abran al hacer clic en dichos elementos.

//+------------------------------------------------------------------+
//|                                              My first window.mqh |
//+------------------------------------------------------------------+
//DECLARE A NEW WINDOW
//----------------------------------------------------------------------------------
NEW_WINDOW, 
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "Just a window",
//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//------------------------------------------------------ 
/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  
//------------------------------------------------------

END_WINDOW,
//----------------------------------------------------------------------------------




//DECLARE A NEW WINDOW
//----------------------------------------------------------------------------------
NEW_WINDOW,  
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "My first window",
//------------------------------------------------------
/*POINT TO WINDOW'S ICON*/  W_ICON, "::Images\\16x16\\Smile.bmp",  
//------------------------------------------------------

//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//----------------------------------------------------------------------------------
/*WINDOW OPENS AT START*/   OPEN_ON_INIT,  /*(OOI)*/

/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  

/*MARGINS OF THE WINDOW*/   MARGINS, 40,40,/*Х, Y*/
//----------------------------------------------------------------------------------
//
//----------------------------------------------------------------------------------
//1. DECLARE A GROUP WITH AN ABSTRACT NAME  A.
//2. DECLARE A NEW ROW OF ELEMENTS IN THE GROUP WITH A SYMBOL  __, 
//3. DECLARE A BUTTON AND WRITE IT'S NAME.
//4. END GROUP WITH THE KEYWORDS  END_GROUP,
//------------------------------------------------------
GROUP, "Buttons group",

__, BUTTON,  "Just a window", W, 150, //the button WILL call the window due to sharing the same name.   

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 
//----------------------------
"Just a window",    N_TEXT,  "Press to open",//redefine text on the button

"Just a window",    N_LABEL, "::Images\\16x16\\Alarm clock.bmp",
//------------------------------------------------------
//FINISH THE WINDOW BY KEYWORDS END_WINDOW,
//------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------


Y la segunda variante:

//+------------------------------------------------------------------+
//|                                              My first window.mqh |
//+------------------------------------------------------------------+
//DECLARE A NEW WINDOW
//----------------------------------------------------------------------------------
NEW_WINDOW, 
 
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "Just a window",
//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//------------------------------------------------------ 
/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  
//------------------------------------------------------

END_WINDOW,
//----------------------------------------------------------------------------------




//DECLARE A NEW WINDOW
//----------------------------------------------------------------------------------
NEW_WINDOW,  
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "My first window",
//------------------------------------------------------
/*POINT TO WINDOW'S ICON*/  W_ICON, "::Images\\16x16\\Smile.bmp",  
//------------------------------------------------------

//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//----------------------------------------------------------------------------------
/*WINDOW OPENS AT START*/   OPEN_ON_INIT,  /*(OOI)*/

/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  

/*MARGINS OF THE WINDOW*/   MARGINS, 40,40,/*Х, Y*/
//----------------------------------------------------------------------------------
//
//----------------------------------------------------------------------------------
//1. DECLARE A GROUP WITH AN ABSTRACT NAME  A.
//2. DECLARE A NEW ROW OF ELEMENTS IN THE GROUP WITH A SYMBOL  __, 
//3. DECLARE A BUTTON AND WRITE IT'S NAME.
//4. END GROUP WITH THE KEYWORDS  END_GROUP,
//------------------------------------------------------
GROUP, "Buttons group",

__, BUTTON,  "Press to open", W, 150,   

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 
//----------------------------
"Press to open", OPENS_WINDOW, "Just a window",//opens the window by the keyword 

"Press to open", N_LABEL, "::Images\\16x16\\Alarm clock.bmp",
//------------------------------------------------------
//FINISH THE WINDOW BY KEYWORDS END_WINDOW,
//------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------



Resultado: