Discusión sobre el artículo "Interfaces gráficas IV: Modo de ventanas múltiples y sistema de prioridades (Capítulo 2)"

 

Artículo publicado Interfaces gráficas IV: Modo de ventanas múltiples y sistema de prioridades (Capítulo 2):

En este artículo vamos a ampliar la implementación de la librería hasta conseguir la posibilidad de crear las interfaces de ventanas múltiples para nuestras aplicaciones MQL. Aparte de eso, desarrollaremos el sistema de las prioridades para el clic izquierdo del ratón en los objetos gráficos. Lo vamos a necesitar para no tener problemas cuando los controles no responden inesperadamente a las acciones del usuario.

Fig. 2. Estructura de la librería en la fase actual del desarrollo.

Autor: Anatoli Kazharski

 

Anatoly, me he dado cuenta de un error: he decidido mirar los ejemplos e inmediatamente he visto que si la ventana está presionada hacia el borde derecho y la información sobre herramientas está activada, esta información sobre herramientas sobrepasa el borde derecho de la pantalla. ¿Podrías corregir la coordenada x cuando el tooltip se sale de la pantalla?

Y otra sugerencia: en los menús, en los elementos de menú con submenús desplegables (no sé cómo llamarlos correctamente), en aquellos en los que hay una flecha hacia la derecha indicando que se abrirá otro elemento, creo que es mejor hacer la apertura al pasar el cursor por encima de tal elemento de menú (a lo Windows). O que sea un parámetro: o se abre un nuevo elemento al pasar el cursor por encima o al hacer clic (como ahora).

 
Artyom Trishkin:

Anatoly, me he dado cuenta de un error: he decidido mirar los ejemplos e inmediatamente he visto que si la ventana está presionada hacia el borde derecho y la información sobre herramientas está activada, esta información sobre herramientas sobrepasa el borde derecho de la pantalla. ¿Podrías corregir la coordenada x cuando el tooltip se sale de la pantalla?

Y otra sugerencia: en los menús, en los elementos de menú con submenús desplegables (no sé cómo llamarlos correctamente), en aquellos en los que hay una flecha hacia la derecha indicando que se abrirá otro elemento, creo que es mejor hacer la apertura al pasar el cursor por encima de tal elemento de menú (a lo Windows). O que sea un parámetro: o se abre un nuevo elemento al pasar el cursor por encima o al hacer clic (como ahora).

Lo haremos. Haremos correcciones y mejoras después de que la primera versión de la biblioteca esté completamente publicada. Tenemos que arreglar el resultado actual.

Entonces haremos una lista de lo que hay que hacer, definiremos prioridades y podremos intentar publicar un artículo aparte.

 

Gracias por la excelente serie de artículos. He disfrutado leyendo los códigos MQL4. Program.mqh tiene los siguientes dos errores:

//error#1: array fuera de rango en 'Program.mqh' (753,32)

//Arreglado cambiando las líneas 742-746
   string text[2]=
     {
      "\"Icon button\" (1) control",
      "Opens the dialog box (2)."
     };

//error#2: array fuera de rango en 'Program.mqh' (1012,32)

//Arreglado cambiando las líneas 1000-1005
   string text[3]=
     {
      "\"Icon button\" (5) control",
      "This is the second line of the tooltip.",
      "This is the third line of the tooltip."
     };
 
Kaleem Haider:

Gracias por la excelente serie de artículos. He disfrutado de la lectura de los códigos MQL4. Program.mqh es el siguiente dos errores:

Gracias.

En mi versión de estos errores no.

742-746:

//+------------------------------------------------------------------+
//| Tooltip 1|
//+------------------------------------------------------------------+
bool CProgram::CreateTooltip1(void)
  {
#define  TOOLTIP1_LINES_TOTAL 2
//--- 
   m_tooltip1.WindowPointer(m_window1);
   m_tooltip1.ElementPointer(m_icon_button1);
//--- 
   string text[]=
     {
      "Line 1",
      "Line 2"
     };
//--- 
   m_tooltip1.Header("Icon Button 1");
   m_tooltip1.XSize(250);
   m_tooltip1.YSize(70);
//--- 
   for(int i=0; i<TOOLTIP1_LINES_TOTAL; i++)
      m_tooltip1.AddString(text[i]);
//--- 
   if(!m_tooltip1.CreateTooltip(m_chart_id,m_subwin))
      return(false);
//--- 
   CWndContainer::AddToElementsArray(0,m_tooltip1);
   return(true);
  }

//---

1000-1005:

//+------------------------------------------------------------------+
//| Tooltip 5|
//+------------------------------------------------------------------+
bool CProgram::CreateTooltip5(void)
  {
#define  TOOLTIP5_LINES_TOTAL 3
//--- 
   m_tooltip5.WindowPointer(m_window1);
   m_tooltip5.ElementPointer(m_icon_button5);
//--- 
   string text[]=
     {
      "Line 1",
      "Line 2",
      "Line 3"
     };
//--- 
   m_tooltip5.Header("Icon Button 5");
   m_tooltip5.XSize(250);
   m_tooltip5.YSize(80);
//--- 
   for(int i=0; i<TOOLTIP5_LINES_TOTAL; i++)
      m_tooltip5.AddString(text[i]);
//--- 
   if(!m_tooltip5.CreateTooltip(m_chart_id,m_subwin))
      return(false);
//--- 
   CWndContainer::AddToElementsArray(0,m_tooltip5);
   return(true);
  }
 
Anatoli Kazharski:

Gracias.

En mi versión de estos errores no.

742-746:

//---

1000-1005:

Los errores están en la sección de descarga del artículo, tal vez no se actualizó.
 

Parece que Kaleem utiliza una versión de la plataforma un poco anticuada.

Pero en aras de la claridad y hacer menos propenso a errores, el código fuente debe ser cambiado para definir las matrices con tamaños explícitos como text[TOOLTIP1_LINES_TOTAL] y text[TOOLTIP5_LINES_TOTAL]. De lo contrario, puede obtener un error de límites en el futuro si las matrices cambian pero las definiciones no por una omisión.

 
Kaleem Haider:
Los errores están en la sección de descarga de artículos. Quizá no estaba actualizada.

Comprobado.

Sí, la versión en inglés tiene estos errores. Parece que cuando los editores que trabajan en la traducción al Inglés, han borrado accidentalmente delimitadores (,) elementos de matrices.

 
Stanislav Korotky:

Parece que Kaleem utiliza una versión de la plataforma un poco anticuada.

Pero en aras de la claridad y hacer menos propenso a errores, el código fuente debe ser cambiado para definir las matrices con tamaños explícitos como text[TOOLTIP1_LINES_TOTAL] y text[TOOLTIP5_LINES_TOTAL]. De lo contrario, puede obtener fuera de los límites de error en el futuro si las matrices de cambiar, pero no define por una omisión.

Estoy usando MetaTrader 4 Versión: 4.00 Build 950. ¿No es esta la última versión?
 
Kaleem Haider:
Estoy usando MetaTrader 4 Version: 4.00 Build 950. ¿No es esta la última versión?
960 parece ser la última versión.
 

Anatoly, ¿es posible hacer que se puedan abrir dos ventanas desde el panel principal para que las tres ventanas permanezcan activas?

Es decir: tenemos un panel principal, tiene botones para abrir dos paneles adicionales, cada uno de estos paneles adicionales tiene su propio conjunto de botones y otras cosas.

Si se pulsa el botón 1 del panel principal, se abre el panel 1. Los botones del panel principal permanecen activos y en el panel1 también están activos.

Pulse el botón2 en el panel principal cuando el panel1 ya está abierto - se abre el panel2. Todos los botones del panel principal, del panel1 y del panel2 permanecen activos.

Esto permitirá tener una interfaz con paneles activos móviles, cada uno de los cuales realiza sus propias funciones.

Ahora es posible tener sólo un panel activo a la vez.