Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿Esto se aplica al modo normal o al probador?
Modo normal, Nikolai.
Gracias.
¿Esta función no es adecuada?
Desgraciadamente no. Mueve el objeto bitmap en sí, necesito una función que mueva los puntos x del contenido. Sé que internamente la memoria consiste en un array x, y pero no existe memmove o algo así en mql. No se como mover la memoria rápidamente.
Modo normal, Nikolai.
Suelo seguir el siguiente esquema:
.
Si no funciona en MT4, entonces algo va mal con el evento CHARTEVENT_CHART_CHANGE. Ahora no puedo comprobarlo, aún no hay cotizaciones.
Suelo hacer lo siguiente:
Si no funciona en MT4, entonces algo va mal con el evento CHARTEVENT_CHART_CHANGE. Ahora no puedo comprobarlo, aún no hay cotizaciones.
Nicolás, para que no pierdas el tiempo, escribí más arriba una solución que resolvió mi problema, a saber, como bien notaste, el siguiente código insertado en OnCalcucate():
Desgraciadamente no. Mueve el objeto bitmap en sí, necesito una función que mueva los puntos x del contenido. Sé que internamente la memoria consiste en un array x, y pero no existe memmove o algo así en mql. No se como mover la memoria rápidamente.
No lo he entendido, ¿necesitas mover el área rectangular dentro de todo el lienzo?
Nicolás, para que no pierdas el tiempo escribí más arriba una solución que resolvió mi problema, a saber, como bien notaste, el siguiente código insertado en OnCalcucate():
En modo normal no test no deberías hacer esto, porque la función ChartChanged() se ejecutaría dos veces seguidas, lo cual no es razonable. Después de todo, se ejecuta cuando se produce el evento CHARTEVENT_CHART_CHANGE dentro del fichero iCanvas.mqh.
Es correcto redibujar el lienzo ligado a barras o tiempo en OnChartEvent cuando se produce el evento de cambio de ventana ( CHARTEVENT_CHART_CHANGE) sin utilizar ChartChanged().
Nicolás, para que no pierdas el tiempo, escribí más arriba una solución que resolvió mi problema, a saber, como bien notaste, el siguiente código insertado en OnCalcucate():
Debes tener en cuenta lo siguiente:
Tu problema se debía a que OnCalculate se ejecuta aparentemente antes que OnChartEvent y por tanto ChartChanged() no se ha procesado todavía.
Por eso es razonable implementar el manejador de redibujado exactamente en OnChartEvent y no en OnCalculate . Especialmente debería hacerse porque el usuario puede cambiar el tamaño de la ventana en cualquier momento. El evento CHARTEVENT_CHART_CHANGE es responsable de todo esto
No lo he entendido, ¿hay que mover el área rectangular dentro de todo el lienzo?
Sí. Ejemplo: Dibujo un círculo en el centro del lienzo a pantalla completa y quiero mover el círculo hacia la izquierda, pero no quiero borrar toda el área y volver a pintar el círculo con cada movimiento, sino simplemente desplazar la memoria hacia la izquierda.
El CCanvas es simplemente un Array x/y de puntos.
Me refiero a una función que mueva los m_pixels a la izquierda, derecha, arriba, abajo.
Sí. Ejemplo: Dibujo un círculo en el centro del lienzo a pantalla completa y quiero desplazar el círculo hacia la izquierda, pero no quiero borrar toda el área y volver a pintar el círculo con cada movimiento, sino simplemente desplazar la memoria hacia la izquierda.
El CCanvas es simplemente un Array x/y de puntos.
Me refiero a una función que mueva los m_pixels a la izquierda, derecha, arriba, abajo.
Sí, es un deseo razonable.
Tanto más que no es difícil implementarlo.
Lo pensé, pero llegué a la conclusión de que si hay necesidad de mover la parte rectangular del lienzo común, hay una manera más fácil de implementarlo:
Sí, un deseo bastante razonable.
Tanto más que no es difícil ponerlo en práctica.
Lo pensé, pero llegué a la conclusión de que si hay necesidad de mover la parte rectangular del lienzo general, hay una manera más fácil de ponerlo en práctica:
Eso no funciona porque mi lienzo es la pantalla completa. Es como un gráfico de ticks pero cuesta demasiado tiempo borrar todo el fondo y construcht y pintar todo nuevo así que necesito mover el contenido a la izquierda (ej. 8 pixels) y dibujar solo los nuevos 8 pixels (8 px en dirección x y altura completa) con nuevos datos. He intentado mover el Canvas 8 px a la izquierda con MoveCanvas y esto funciona pero no puedo redimensionarlo de forma que de la izquierda se quiten 8 px de ancho y a la derecha se añadan 8 px. Espero que lo entiendas...