Librerías: Easy Canvas - página 13

 
Mighty7:

Llevaría demasiado tiempo borrar todo el fondo, construir y pintar todo nuevo

No tanto. Construir puede llevar mucho tiempo.

Mantenemos el estado en memoria (posición de los elementos, su color, etc.), si necesitamos, por ejemplo, mover un elemento, cambiamos sus coordenadas, borramos el lienzo y dibujamos un nuevo estado. Visualmente parece la velocidad del rayo, incluso con muchos elementos )

 
Mighty7:

Eso no funciona porque mi lienzo es la pantalla completa. Es como un gráfico de tick pero cuesta demasiado tiempo borrar todo el fondo y construir 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...

Mighty7:

Eso no funciona porque mi Canvas es el fullscreen. Es como un gráfico de tick pero cuesta demasiado tiempo borrar el fondo completo y construcht y pintar todo nuevo así que necesito mover el contenido a la izquierda (por ejemplo, 8 píxeles) y dibujar sólo los nuevos 8 píxeles (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...

Ok, hecho. Descarga la versión 1.42.
Pero necesitas controlar el redimensionamiento vertical.

Ok, hecho. Descárgate la versión 1.42.
Pero necesitas controlar el cambio de escala vertical.

#include <Canvas\iCanvas.mqh> //https://www.mql5.com/es/code/22164

input int shift = -1;
//+------------------------------------------------------------------+
int OnInit() {
   EventSetMillisecondTimer(100);
   Canvas.Erase(0x00FFFFFF);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnTimer() {
   Canvas.FillCircle(rand()%_Width,rand()%_Height, 10+rand()%100,Canvas.Grad(rand()/32767.0)&0x80FFFFFF);
   Canvas.ShiftCanvas(shift);
   Canvas.Update();
   
}
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[]) {
   return(rates_total);
}
void              ShiftCanvas(const int _shift=-1, uint bckgr = 0x00FFFFFF) { // desplazar todo el lienzo hacia la izquierda (x es un valor negativo) o hacia
                     // la derecha (x es un valor positivo). El lienzo en sí permanece en su lugar, pero todos los píxeles se desplazan. El bckgr es 
                     // el color con el que se rellena la franja recién creada a la izquierda o a la derecha, según la dirección del desplazamiento.
                        if (_shift==0) return;
                        int _Shift = Fabs(_shift);
                        if (_Shift>=m_width) { ArrayInitialize(m_pixels,bckgr); return;}
                        int start = (_shift>0)?0:-_shift;
                        int count = m_width-_Shift;
                        int offset= (_shift>0)?0:count;
                        for (; start<m_height*m_width; start+=m_width, offset+=m_width) {                        
                           ArrayCopy(m_pixels,m_pixels,start+_shift,start,count); 
                           ArrayFill(m_pixels,offset,_Shift,bckgr);
                        }                        
                     }



Archivos adjuntos:
 
Estupendo. Muchas gracias.
 
Mighty7:
Estupendo. Muchísimas gracias.
De nada 😊
 
Nikolai Semko:
No hay problema 😊

Funciona como un charme pero para tenerlo completo, ¿es posible implementar un Shift también
en el eje y (norte/sur)? Necesito que esto también se desplace/desplace en estas direcciones.

 
Mighty7:

Funciona como un charme pero para tenerlo completo, ¿es posible implementar un Shift también
en el eje y (norte/sur)? Necesito esto para desplazarse / desplazamiento en estas direcciones también.

OK. Lo hare.

 
Mighty7:

Funciona como un charme pero para tenerlo completo, ¿es posible implementar un Shift también
en el eje y (norte/sur)? Necesito esto para desplazarse / desplazamiento en estas direcciones también.

hecho

ver 1.43

Archivos adjuntos:
 
Nikolai Semko :

getan

siehe 1.43

Absolutamente genial. Thank you very much.

Editar: x=-1,y=0 no se desplaza, por lo que no funciona correctamente.

 
Mighty7:

Absolutamente brillante. Muchas gracias.

Editar: x=-1,y=0 no se desplaza, por lo que no está funcionando correctamente.

Gracias. Arreglado.

Archivos adjuntos:
iCanvas.mqh  52 kb
 
Nikolai Semko:

Gracias. Corregido.

Tengo que decir gracias. Ahora está perfecto. Buen trabajo.