错误、漏洞、问题 - 页 2801 1...279427952796279727982799280028012802280328042805280628072808...3184 新评论 Nikolai Karetnikov 2020.07.13 01:12 #28001 Roman:试着只打印(而printf似乎也能工作。 在printf中,第一个参数指定要打印的值的类型。 打印 作品!谢谢你!)) 但printf并不总是工作 Igor Makanu 2020.07.13 11:54 #28002 我想在画布上显示一个字符并移动它,源。 #property indicator_chart_window #property indicator_plots 0 #include <Canvas\Canvas.mqh> CCanvas canvas; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { canvas.CreateBitmapLabel(ChartID(), 0, "canvas", 0, 0, 900, 400); canvas.FontSet("Courier New", 32); canvas.Erase(0); canvas.Update(); EventSetMillisecondTimer(250); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { static int x = 0; static const uint col_black = ColorToARGB(clrBlack); static const uint col_red = ColorToARGB(clrRed); canvas.TextOut(x, 100, "S", col_black); x+=10; canvas.TextOut(x, 100, "S", col_red); canvas.Update(); } //+------------------------------------------------------------------+ 为什么我用黑色覆盖了以前的渲染图像,而人工痕迹仍然存在? Andrey Barinov 2020.07.13 11:59 #28003 Igor Makanu:我想在画布上显示一个字符并移动它,源。为什么我用黑色覆盖了之前的渲染图像,但仍然有伪影? 最好一次就把整个画布重新填满。最好是一次性重绘整个画布。 Igor Makanu 2020.07.13 12:13 #28004 Andrey Barinov:最好是一次性重绘整个画布。反正事后都会重新绘制。 我已经想好了,但这个问题纯属技术问题 事实证明,字体的抗锯齿是有效的,而目标是移动精灵,总的来说,我想了解为什么它能如此工作。 Igor Zakharov 2020.07.13 13:35 #28005 我不知道从哪里挖,谁能建议一个搜索方向。 我在写一个指标,但第一次点击 "编译 "后,计算部分给出的是废话,我再次编译,似乎是真的。 2020.07.13 14:12:05.987 ZigZag_MP (USDJPY,M15) Average wave size = -2147483648 points; less then average: 1/100 min=99999999.0 max=107.1 steps=-2147483648 2020.07.13 14:12:27.179 ZigZag_MP (USDJPY,M15) Average wave size = 273 points; less then average: 65/100 min=106.422 max=107.848 steps=57 2020.07.13 14:18:38.001 ZigZag_MP (USDJPY,M15) Average wave size = -2147483648 points; less then average: 1/100 min=99999999.0 max=107.1 steps=-2147483648 2020.07.13 14:18:46.751 ZigZag_MP (USDJPY,M15) Average wave size = 273 points; less then average: 65/100 min=106.422 max=107.848 steps=57 我没有做什么特别的事情--我只是计算最后100个Zig-Zag的膝盖。 我不止一次地反转代码,但问题是,它是一样的,但结果却不同。 预计可能的版本之一:指标缓冲区 被强制初始化,里面没有垃圾。 Igor Makanu 2020.07.13 14:13 #28006 Igor Zakharov:预计可能的版本之一:指示器缓冲区 被强行初始化,里面没有垃圾。 问题是,你在哪里初始化 如果prev_calculated == 0,则一切正常,如果是在OnInt()中,则在切换TF和编译过程中会出现故障。 Igor Zakharov 2020.07.13 15:49 #28007 Igor Makanu:问题是,你在哪里初始化如果通过prev_calculated == 0,那么一切正常,如果在OnInt()中,那么在切换TF和编译时就会出现闪退。 尝试了所有的变体(包括onInt和oncalculated);目前的情况是:在循环中,每个值都是单独分配的。我通过数据窗口 检查了 - 没有奇怪的/垃圾的值。 Mihail Matkovskij 2020.07.13 17:46 #28008 Igor Makanu:我想在画布上显示一个字符并移动它,源。为什么我把以前渲染的图像打成黑色,而伪影仍然存在? 这是因为抗锯齿的原因。最可靠的方法是在符号的顶部画一个背景色 的矩形。然后输出带有新坐标的符号。在这样的情况下,通常会这样做。 Nikolai Semko 2020.07.13 19:58 #28009 Igor Makanu: Mihail Matkovskij: 这是因为抗锯齿的缘故。最可靠的方法是在符号的顶部画一个背景色 的矩形。然后输出带有新坐标的符号。在这样的情况下,通常会这样做。 不要忘记简单的移动画布,不需要任何重绘和绘画。 这是最快速的移动方式。 #include <Canvas\iCanvas.mqh> //https://www.mql5.com/ru/code/22164 void OnStart() { // Формируем какой-то фон for (int i = 0; i<1000; i++) Canvas.Circle(rand()%2048, rand()%2048,50+rand()%50,ARGB(255,rand()%256,rand()%256,rand()%256)); Canvas.Update(); // ----------------------- int x=100, y=100; iCanvas c(0,x,y,"symbol",50,50); // создаем дополнительный канвас размером 50х50 c.TextPosition(0,0); c.CurentFont("Tahoma",50); c.Comm("S"); c.Update(); while(!IsStopped()&& x<W.Height) { c.MoveCanvas(++x,++y); // перемещаем данный канвас c.Update(); Sleep(50); } } Mihail Matkovskij 2020.07.13 21:07 #28010 Nikolai Semko:不要忘了可以简单地移动画布而不需要重画或重涂的能力。 这是最快的移动方式。没有人否认这一点。只是有一个概念,就是有一个单一的屏幕作为画布。反过来,同样的自定义画布(像素阵列)被画在一个窗口画布(图表)上。更确切地说,它首先是使用ResourceCreate(在OBJ_BITMAP或OBJ_BITMAP_LABEL 中)传递给图表(复制)。在图表窗口中,所有的东西都是用Win API绘制的(如果我没有弄错的话)。虽然,它也可以使用其他API来完成。但CCanvas类有自己的方法在m_pixels数组的元素上绘图。 事实证明,画一个小的矩形,那么你还是要用ResourceCreate 传递大量的像素(只在画图时节省时间)。而这样一来,你可以简单地在图表周围 移动OBJ_BITMAP_LABEL,而不需要处理m_pixels数组,然后将其复制到OBJ_BITMAP_LABEL。 1...279427952796279727982799280028012802280328042805280628072808...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
试着只打印(
而printf似乎也能工作。
在printf中,第一个参数指定要打印的值的类型。
打印 作品!谢谢你!))
但printf并不总是工作
我想在画布上显示一个字符并移动它,源。
为什么我用黑色覆盖了以前的渲染图像,而人工痕迹仍然存在?
我想在画布上显示一个字符并移动它,源。
为什么我用黑色覆盖了之前的渲染图像,但仍然有伪影?
最好一次就把整个画布重新填满。最好是一次性重绘整个画布。
最好是一次性重绘整个画布。反正事后都会重新绘制。
我已经想好了,但这个问题纯属技术问题
事实证明,字体的抗锯齿是有效的,而目标是移动精灵,总的来说,我想了解为什么它能如此工作。
我不知道从哪里挖,谁能建议一个搜索方向。 我在写一个指标,但第一次点击 "编译 "后,计算部分给出的是废话,我再次编译,似乎是真的。
我没有做什么特别的事情--我只是计算最后100个Zig-Zag的膝盖。 我不止一次地反转代码,但问题是,它是一样的,但结果却不同。
预计可能的版本之一:指标缓冲区 被强制初始化,里面没有垃圾。
预计可能的版本之一:指示器缓冲区 被强行初始化,里面没有垃圾。
问题是,你在哪里初始化
如果prev_calculated == 0,则一切正常,如果是在OnInt()中,则在切换TF和编译过程中会出现故障。
问题是,你在哪里初始化
如果通过prev_calculated == 0,那么一切正常,如果在OnInt()中,那么在切换TF和编译时就会出现闪退。
尝试了所有的变体(包括onInt和oncalculated);目前的情况是:在循环中,每个值都是单独分配的。我通过数据窗口 检查了 - 没有奇怪的/垃圾的值。
我想在画布上显示一个字符并移动它,源。
为什么我把以前渲染的图像打成黑色,而伪影仍然存在?
这是因为抗锯齿的原因。最可靠的方法是在符号的顶部画一个背景色 的矩形。然后输出带有新坐标的符号。在这样的情况下,通常会这样做。
这是因为抗锯齿的缘故。最可靠的方法是在符号的顶部画一个背景色 的矩形。然后输出带有新坐标的符号。在这样的情况下,通常会这样做。
不要忘记简单的移动画布,不需要任何重绘和绘画。
这是最快速的移动方式。
不要忘了可以简单地移动画布而不需要重画或重涂的能力。
这是最快的移动方式。
没有人否认这一点。只是有一个概念,就是有一个单一的屏幕作为画布。反过来,同样的自定义画布(像素阵列)被画在一个窗口画布(图表)上。更确切地说,它首先是使用ResourceCreate(在OBJ_BITMAP或OBJ_BITMAP_LABEL 中)传递给图表(复制)。在图表窗口中,所有的东西都是用Win API绘制的(如果我没有弄错的话)。虽然,它也可以使用其他API来完成。但CCanvas类有自己的方法在m_pixels数组的元素上绘图。
事实证明,画一个小的矩形,那么你还是要用ResourceCreate 传递大量的像素(只在画图时节省时间)。而这样一来,你可以简单地在图表周围 移动OBJ_BITMAP_LABEL,而不需要处理m_pixels数组,然后将其复制到OBJ_BITMAP_LABEL。