程序库: Easy Canvas - 页 13

 
Mighty7:

擦除所有背景、构建和粉刷新的一切都需要很长时间。

没那么长。构建可能需要很多时间。

我们将状态(元素的位置、颜色等)保存在内存中,如果需要移动某个元素,只需更改其坐标,擦除画布并绘制新的状态。从视觉上看,即使有很多元素,它也能以闪电般的速度运行。)

 
Mighty7:

这行不通,因为我的画布是全屏的。它就像一个刻度线图,但要擦除整个背景和构造并绘制新的一切,需要花费太多时间,因此我需要将内容向左移动(例如 8 像素),然后只在新的 8 像素(X 方向 8 px,全高)上绘制新的数据。我试着用 MoveCanvas 将画布向左移动 8 px,这样做是可行的,但我无法调整画布的大小,即从左边移去 8 px 宽度,而在右边增加 8 px。希望您能理解...

Mighty7:

这行不通,因为我的画布是全屏的。这就像一个刻度线图,但要擦除整个背景并构建和绘制所有新内容需要花费大量时间,因此我需要将内容向左移动(例如 8 像素),然后只在新的 8 像素(X 方向 8 px 且全高)上绘制新数据。我试着用 MoveCanvas 将画布向左移动 8 px,这样做是可行的,但我无法调整画布的大小,即从左边移去 8 px 宽度,而在右边增加 8 px。希望您能理解...

好了,完成。下载 1.42 版。
但您需要控制垂直调整大小。

好了,完成。自己下载 1.42 版。
但您需要控制 垂直比例的变化。

#include <Canvas\iCanvas.mqh> //https://www.mql5.com/zh/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) { // 将整个画布向左移动(x 为负值)或向右移动(x 为负值)。
                     // 右移(x 为正值)。画布本身保持不变,但所有像素都会移动。bckgr 为 
                     // 根据移动的方向,向左或向右填充新创建条纹的颜色。
                        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);
                        }                        
                     }



附加的文件:
 
太好了非常感谢
 
Mighty7:
太好了非常感谢
没问题 😊
 
Nikolai Semko:
没问题 😊

它的工作原理很简单,但要使其完整,是否有可能在 Y 轴(北/南)上也实现移位
?我也需要在这些方向上滚动/移动。

 
Mighty7:

它的工作原理与字符集类似,但要使其完整,是否有可能在 Y 轴(北/南)上也实现移位
?我也需要在这些方向上滚动/移动。

好的。我会做到的。

 
Mighty7:

它的工作原理与字符集类似,但要使其完整,是否有可能在 Y 轴(北/南)上也实现移位
?我也需要在这些方向上滚动/移动。

已完成

版本 1.43

附加的文件:
 
Nikolai Semko :

濑户

siehe 1.43

绝对精彩。非常感谢。

编辑:x=-1,y=0 没有移动,因此无法正常工作。

 
Mighty7:

绝对精彩。非常感谢。

编辑:x=-1,y=0 没有移位,所以不能正常工作。

谢谢。已修复。

附加的文件:
iCanvas.mqh  52 kb
 
Nikolai Semko:

谢谢。已更正。

我得说谢谢现在完美了。干得好