Discusión sobre el artículo "Cómo crear un panel gráfico de cualquier nivel de complejidad"

 

Artículo publicado Cómo crear un panel gráfico de cualquier nivel de complejidad:

En el artículo se analiza con detalle cómo crear un panel basado en la clase CAppDialog y cómo añadir al mismo los elementos de control. Asimismo, se describe la estructura del panel y el esquema de herencia de los objetos en este. Se muestra qué es necesario para procesar eventos y cómo estos se distribuyen a los elementos de control subordinados. Se dan ejemplos de cambio de los siguientes parámetros del panel: el tamaño y el color del fondo.

El orden de creación y superposición de objetos de la sección Paneles y diálogos de la Biblioteca estándar tiene el aspecto siguiente. Primero creamos el objeto "Border", dentro de sus límites se añade el fondo del panel en forma de objeto "Back", y en el fondo se superpone el área de cliente "ClientBack", dentro de la cual se pueden encontrar los subcontroles. A la zona superior del panel se añaden el objeto "Caption" con el nombre del panel y dos botones de control.

Descomposición del panel AppWindow en controles gráficos

Autor: Vladimir Karputov

 

Gracias por el artículo. ¡Muy informativo!

 
Sí, el artículo es útil, pero no puedo entender cómo manejar ON_DBL_CLICK evento, ¿puedes ayudar?
 
Andrii Djola:
Sí, el artículo es útil, pero no puedo entender cómo manejar el evento ON_DBL_CLICK, ¿puedes ayudar?

Doble clic son dos clics con un intervalo de tiempo muy pequeño entre ellos. Así que puede ser manejado de la misma manera que un clic normal - sólo tiene que añadir una variable estática a OnChartEvent. Mira el ejemplo en https://www.mql5.com/es/docs/constants/chartconstants/enum_chartevents y haz algo como esto:

//+------------------------------------------------------------------+
//| Función ChartEvent|
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // identificador del evento 
                  const long& lparam,   // parámetro de evento de tipo long
                  const double& dparam, // parámetro de evento de tipo doble
                  const string& sparam  // parámetro de evento de tipo cadena
                  )
  {
//--- hora del último clic del ratón
   static uint last_click=0;
//--- clic izquierdo en el gráfico
   if(id==CHARTEVENT_CLICK)
     {
      uint click_time=GetTickCount();
      Print("Las coordenadas del clic del ratón en el gráfico: x = ",lparam,"  y = ",dparam);
      if(click_time-last_click<dbl_click_time) 
        {
         Print("DoubleClick!");
         // cualquier otra acción
        }
      last_click=click_time;
     }
//--- clic del ratón sobre un objeto gráfico
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      Print("Pulsando el botón del ratón sobre un objeto llamado '"+sparam+"'");
     }
//--- pulsar un botón del teclado
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch(lparam)
        {
         case KEY_NUMLOCK_LEFT:  Print("Se pulsa KEY_NUMLOCK_LEFT".);   break;
         case KEY_LEFT:          Print("KEY_LEFT es presionado.");           break;
         case KEY_NUMLOCK_UP:    Print("Se ha pulsado KEY_NUMLOCK_UP".);     break;
         case KEY_UP:            Print("TECLA_ARRIBA pulsada".);             break;
         case KEY_NUMLOCK_RIGHT: Print("Se pulsa KEY_NUMLOCK_RIGHT".);  break;
         case KEY_RIGHT:         Print("KEY_RIGHT");          break;
         case KEY_NUMLOCK_DOWN:  Print("Se pulsa KEY_NUMLOCK_DOWN".);   break;
         case KEY_DOWN:          Print("KEY_DOWN es presionado.");           break;
         case KEY_NUMPAD_5:      Print("KEY_NUMPAD_5 está pulsada".);       break;
         case KEY_NUMLOCK_5:     Print("KEY_NUMLOCK_5 ha sido presionada.");      break;
         default:                Print("Se ha pulsado alguna tecla no listada".);
        }
      ChartRedraw();
......
     }
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Существуют 11 видов событий, которые можно обрабатывать с помощью функции предопределенной функции OnChartEvent(). Для пользовательских событий предусмотрено 65535 идентификаторов в диапазоне от CHARTEVENT_CUSTOM до CHARTEVENT_CUSTOM_LAST включительно. Для генерации пользовательского события необходимо использовать функцию EventChartCustom...
 
Andrii Djola:
Sí, el artículo es útil, pero no puedo entender cómo manejar el evento ON_DBL_CLICK, ¿puedes ayudarme?

Bueno, si intentas hacerlo todo de la forma correcta, es imposible capturar el evento ON_DBL_CLICK. Una prueba sencilla: ejecuto cualquier panel de ejemplo de la sección Paneles y Diálogos, en CWnd::OnMouseUp pongo un breakpoint en:

y como resultado - no importa si haces click o doble click en el panel, el cursor no va al breakpoint. Un fastidio.

 
Vladimir Karputov:

Bueno, si intentas hacerlo todo de la forma correcta, es imposible capturar el evento ON_DBL_CLICK. Una simple comprobación: ejecute cualquier panel de ejemplo de la sección Paneles y diálogos, en CWnd::OnMouseUp ponga un breakpoint en:

y como resultado - no importa si haces click o doble click en el panel, el cursor no va al breakpoint. Vaya.

La solución se mostró en otro hilo https://www.mql5.com/ru/forum/239867#comment_7224345.

Обсуждение статьи "Улучшаем работу с Панелями: добавляем прозрачность, меняем цвет фона и наследуемся от CAppDialog/CWndClient"
Обсуждение статьи "Улучшаем работу с Панелями: добавляем прозрачность, меняем цвет фона и наследуемся от CAppDialog/CWndClient"
  • 2018.04.23
  • www.mql5.com
Опубликована статья Улучшаем работу с Панелями: добавляем прозрачность, меняем цвет фона и наследуемся от CAppDialog/CWndClient: Автор: Vladimir Ka...
 
MetaQuotes Software Corp.:

Nuevo artículo Cómo crear un panel gráfico de cualquier nivel de complejidad ha sido publicado:

Autor: Vladimir Karputov

¡Gran introducción! Muchas gracias
 

Este artículo es muy bueno. Me gusta mucho. Muy bien escrito.


Gracias.

 

Un magnífico artículo para acercarse a este tema o profundizar en él.


Desgraciadamente, esto no cambia el hecho de que falta un editor visual de diálogos en el sistema.

Además, el evento del ratón en los diálogos no se intercepta correctamente y el gráfico se mueve en segundo plano cuando se pulsa el botón del ratón.

Además, los tooltips de los indicadores subyacentes aparecen a través del diálogo.

Esto ocurre a pesar de que el código de Doerk ha sido corregido.

La sustitución de la biblioteca CWndContainer para MetaTrader 5 https://www.mql5.com/es/code/13722

Me pregunto cómo Metaquotes puede ser tan terco como para ignorar esto y no corregirlo.

Die Ersetzung des CWndContainer
Die Ersetzung des CWndContainer
  • votos: 24
  • 2016.09.01
  • Doerk Hilger
  • www.mql5.com
Der echte Autor: Original von MetaQuotes Software Corp. Die Modifizierung von Doerk. Diese Datei ersetzt die originale Datei WndContainer.mqh. Eine neue Funktion und zwei kleine Modifikationen verhindern die Veränderung des Charts beim Druck und bei der Haltung der Maus-Taste innerhalb im Bereichs des Containers, das heißt, beim Druck der...
 
Otto Pauser:

Un magnífico artículo para acercarse a este tema o profundizar en él.


Desgraciadamente, esto no cambia el hecho de que falta un editor visual de diálogos en el sistema.

Además, el evento del ratón en los diálogos no se intercepta correctamente y el gráfico se mueve en segundo plano cuando se pulsa el botón del ratón.

Además, los tooltips de los indicadores que se encuentran detrás atraviesan el diálogo.

Esto ocurre a pesar de que el código de Doerk ha sido corregido.

La sustitución de la biblioteca CWndContainer para MetaTrader 5 https://www.mql5.com/es/code/13722

Me pregunto cómo Metaquotes puede ser tan terco como para ignorar esto y no corregirlo.

Otto entiendo lo que te molesta.

Yo me despedí por demasiados puntos de retoque en la programación gráfica de MT5.

No sé qué concepto persigue MQ ahí, pero creo que van por mal camino.

Hay un marco especial de gráficos integrado en una ventana.

Siempre hablan de seguridad, así que encapsulan todo lo posible.


Basta con proporcionar una API a los datos y dejar que los usuarios decidan qué lenguaje utilizan. Esa sería la forma moderna.


Saludos

 
La clase sería genial, pero no se puede utilizar para aplicaciones como es porque los paneles se ven bien sólo cuando la escala de ppp de windows se establece en 1.
Por lo tanto, la aplicación puede verse bien en su pantalla, pero no en otras.