¿Es eso posible? - página 8

 
Vitaly Muzichenko #:

En algún lugar del foro un código completo de trabajo en mql4 y mql5

Lo escribí hace un año.

¿En qué hilo, o cómo se busca?

 
Andrey Sokolov #:

¿En qué tema, o cómo se busca?

Esta es la gran pregunta con la búsqueda del sitio primitivo, de lo contrario lo habría encontrado yo mismo.

 
¿Probablemente este?
 
Vasiliy Pushkaryov #:
¿Supongo que esto es todo?

Gracias

 
Andrey Sokolov #:

Gracias

Hay una versión revisada y la fuente en el último post de este hilo
 
Andrey Sokolov #:

Hola, ¿podría mostrarme cómo lo hizo?

Envía los datos de la matriz a las etiquetas en el área de cliente de la barra de desplazamiento en un desplazamiento igual al de esta barra de desplazamiento. Puede utilizar CScrollV de la biblioteca estándar como barra de desplazamiento. Array - una lista con todos los elementos. Etiquetas - área para mostrar los elementos de la lista. ¿Qué es tan complicado ahí...? Si se desea, cualquier programador que esté familiarizado con la POO puede hacerlo.

 
Mihail Matkovskij #:

Envía los datos de la matriz a las etiquetas en el área de cliente de la barra de desplazamiento en un desplazamiento igual al de esta barra de desplazamiento. Puede utilizar CScrollV de la biblioteca estándar como barra de desplazamiento. Array - una lista con todos los elementos. Etiquetas - área para mostrar los elementos de la lista. ¿Qué es tan complicado ahí...? Si se desea, cualquier programador que esté familiarizado con la POO puede hacerlo.

¿Has lidiado con el desplazamiento de SB? De alguna manera no he podido conseguir que funcione por separado en el gráfico, sin el panel de clientes. Si tuviera alguna duda, podría preguntar cómo utilizarlo.

Foro sobre trading, sistemas de trading automatizados y comprobador de estrategias

Cómo crear un panel gráfico de cualquier complejidad y cómo funciona".

Vasiliy Pushkaryov, 2021.12.21 10:12

Estoy tratando de crear una barra de desplazamiento vertical sin ningún vínculo con el panel, sólo en el gráfico, pero no funciona.

Por ejemplo, con la casilla de verificación este código da la reacción en el clic del ratón. La casilla aparece y desaparece.

#include <Controls\CheckBox.mqh>
CCheckBox Chbox;
//+------------------------------------------------------------------+
void OnInit()
{
  Chbox.Create(0, "MyCheckBox", 0, 20, 20, 100, 40);
  ChartRedraw();
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
  Chbox.OnEvent(id, lparam, dparam, sparam);
}
//+------------------------------------------------------------------+


Pero con el desplazamiento vertical - no hay reacción a los clics del ratón.

#include <Controls\Scrolls.mqh>
CScrollV Scroll;

void OnInit()
{
  Scroll.Create(0, "MyScrollV", 0, 20, 20, 40, 200);
  ChartRedraw();
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
  Scroll.OnEvent(id, lparam, dparam, sparam);
}
//+------------------------------------------------------------------+

Por favor, aconsejen, ¿quién sabe cómo hacer que este elemento combinado funcione en el gráfico?


 
Vasiliy Pushkaryov #:

¿Has lidiado con el desplazamiento del SB? Por alguna razón no he podido conseguir que funcione por separado en el gráfico, sin el panel de clientes. ¿Tal vez puedas ayudar?


Hay muchos matices ahí. La casilla de verificación funciona (visualmente) porque es OBJ_BITMAP_LABEL, y su Estado es cambiado por la terminal. Su clic puede ser rastreado como el clic de cualquier etiqueta Bitmap en OnChartEvent. Pero la biblioteca estándar tiene su propio modelo de eventos basado en eventos personalizados. Se generan en el voidCAppDialog::ChartEvent enumerando el CArrayObj CWndContainer::m_controls si se ha añadido el componente CScrollVal CAppDialog. Entonces se generan eventos como ON_CLICK, ON_DRAG_START, ON_DRAG_PROCESS y ON_DRAG_END. En tu caso no se han añadido componentes a CAppDialog, por lo que no se generan eventos. Cómo eludir este mecanismo y forzar la generación de eventos personalizados sin CAppDialog no lo he pensado. Necesito analizar el código fuente con más detalle.

Puede intentar crear un componente basado en la clase CWndContainer. Y añadirle elementos. No hay elementos visuales allí (como en CDialog y CAppDialog), pero todos los mecanismos necesarios para el correcto funcionamiento de los elementos de la UI están presentes.
 
Mihail Matkovskij #:

Hay muchos matices ahí. El tick de OnCheckBox funciona (visualmente) porque es OBJ_BITMAP_LABEL, y su Estado es cambiado por la terminal. Su clic puede ser rastreado como cualquier clic de etiqueta Bitmap en OnChartEvent. Pero la biblioteca estándar tiene su propio modelo de eventos basado en eventos personalizados. Se generan en el voidCAppDialog::ChartEvent enumerando el CArrayObj CWndContainer::m_controls si se ha añadido el componente CScrollVal CAppDialog. Entonces se generan eventos como ON_CLICK, ON_DRAG_START, ON_DRAG_PROCESS y ON_DRAG_END. En tu caso no se han añadido componentes a CAppDialog, por lo que no se generan eventos. Cómo eludir este mecanismo y forzar la generación de eventos personalizados sin CAppDialog no lo he pensado. Necesito analizar el código fuente con más detalle.

Puede intentar crear un componente basado en la clase CWndContainer. Y añadirle elementos. No hay elementos visuales allí (como en CDialog y CAppDialog), pero todos los mecanismos necesarios para el correcto funcionamiento de los elementos de la UI están presentes.
Gracias por describir los mecanismos de CAppDialog y por sugerir ponerlo en un contenedor. Cuando tenga más tiempo, intentaré experimentar.
Razón de la queja: