程序库: Easy Canvas - 页 17

 
Nikolai Semko #:
最新版本 1.53

尼古拉斯,我刚下载了这个库,会试试的,非常有趣,谢谢!而在 kodobase 的 ZIP 文件中,仍然是旧版本 1.09!!!!!还好我看了评论,直接下载了。如果我是你,我一定会在MT5, mql5, mql5.com 线程中发布关于这个突出错误的改进建议

MT5, mql5, mql5.com предложения по улучшению. - Сделайте реалистичные предложения по улучшению платформы MT5, языка mql5 и сайта и услуг Mql5 Com.
MT5, mql5, mql5.com предложения по улучшению. - Сделайте реалистичные предложения по улучшению платформы MT5, языка mql5 и сайта и услуг Mql5 Com.
  • 2013.06.15
  • www.mql5.com
удерживая клавишу CTRL при перетаскивании точки привязки. Модифицировать OnChartEvent для обработки нажатия на кнопку. Всплывающее окно появляется автоматически после третьего символа или вы можете вызвать его с помощью CTRL SPACE
 
Alexey Volchanskiy #:

尼古拉斯,我刚下载了这个库,会试试的,非常有趣,谢谢!在 kodobase 的 ZIP 文件中,还有一个旧版本 1.09!!!!还好我看了评论,直接下载了。如果我是你,我肯定会在MT5, mql5, mql5.com 线程中发布关于这个突出错误的改进建议

谢谢 Alexey!
我已经写了 四年多了。

 
尼古拉斯,是否可以使用您的库来绘制与蜡烛绑定的动态变化 "矩形",以取代当前使用的OBJ_RECTANGLE 类型对象。有必要以视觉美观的方式显示矩形的重叠(即存在透明度)。
也许有这样的使用实例?
 
Peter Vorobyev OBJ_RECTANGLE 类型对象。有必要以视觉美观的方式显示矩形的重叠(即存在透明度)。 也许有这样的使用实例?

当然可以,但这取决于什么情况。
如果矩形数量不多(~<1000),而且不需要经常调整大小,则可以使用标准的 CCanvas。在这种情况下,每个矩形都是与价格-时间坐标绑定的独立画布。
如果对象数量较多,且经常改变属性,则使用该库更为方便。
在这种情况下,您可以创建一个结构数组--具有必要属性的虚拟矩形,并在图表发生变化或您的任何属性发生变化时将其显示在可视图表上。
这是最有效的变体,这里的 kanvas(位图)对象将是一个,在整个屏幕上拉伸。但在垂直和水平滚动时,图表中的图形对象会略微滞后。


一个合适的例子或许可以从同一个库Test_iCanvas.mq5 中找到。在这个示例中,有一个半透明矩形,文本与条形图绑定。如果希望半透明矩形在重叠时混合颜色,则需要一个针对此类矩形的函数。如果您需要,我可以帮助您快速完成,或者您也可以使用 iCanvas LineDA 类中的LineHorizontalA 函数自行完成。

ZY 不,Test_iCanvas.mq5 示例不是很合适,因为我通过计时器以错误的方式实现了其中的所有功能。我需要重写这个示例。这是一个让我困惑的笨办法。
好吧,请查看此处此处的 更多示例。但在这些示例中,没有按时间计价的绑定。为此,您需要使用 X 和 Y函数 将价格-时间坐标转换为 XY 坐标。
 
感谢您的详细解答。
,您是否计划在您的程序库中实现一个对象--矩形,允许绘制 具有指定属性的矩形(创建/移动/修改),就像通常的图形对象一样?
 
Peter Vorobyev 绘制 具有指定属性的矩形(创建/移动/修改)?

您的意思不是很清楚。

绘制矩形有不同的功能。创建、移动和修改就足够了。

是的,您可以在第三方代码中创建任何对象作为结构或类,并在其中使用 iCanvas 或 CCanvas 类编写向屏幕输出的方法,但在图形库中实现所有可能的变化是没有意义的。只有基元才是重要的。当然,我也有自己的扩展函数库。它比这个大很多倍,但除了我,没人能理解它。我是为自己写的。

 
Nikolai Semko #:

我不太明白你的意思。

绘制矩形有不同的功能。只需创建、移动和修改即可。

是的,您可以在第三方代码中创建任何对象作为结构或类,并在其中使用 iCanvas 或 CCanvas 类编写向屏幕输出的方法,但在图形库中实现所有可能的变化是没有意义的。只有基元才是重要的。当然,我也有自己的扩展函数库。它比这个大很多倍,但除了我,没人能理解它。我是为自己写的。

谢谢,我明白了,等我更详细地了解这个库之后,如果有具体问题,我会问的。

 
Peter Vorobyev #:

谢谢,我明白了。在我更详细地了解图书馆之后,如果有具体问题,我会提出来。

这里有一个适合您的 EA 示例:

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

//+------------------------------------------------------------------+
int OnInit() {
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {}
//+------------------------------------------------------------------+
void OnTick() {
   Draw();
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam) {
   if (id == CHARTEVENT_CHART_CHANGE || id == CHARTEVENT_MOUSE_MOVE) Draw();
}
//+------------------------------------------------------------------+
void Draw() {
   static uint last = 0;         //
   uint cur = GetTickCount();    // 性能优化所必需
   if (cur-last<25) return;      // 对测试人员尤为重要
   last = cur;                   //
   if (Canvas.tester) ChartChanged();   // 在测试仪中正确运行。
   Canvas.Erase(0x00FFFFFF);   // 为了正确输出字体,需要这样的掩码
   Canvas.CurentFont("Calibri Light", 16,16,0xFF000000);
   for (int shift = -1000; shift<=1000; shift+=50 ) {
      uint clr = (Canvas.Grad((shift+1000.0)/2000.0) & 0x00FFFFFF)|0x40000000;
      int bar = Round(Canvas.Bar(double(_MouseX+shift)));
      double price  = iHigh(_Symbol,PERIOD_CURRENT,bar);
      int x = int(Canvas.X(double(bar)));
      int y = (int)_Y(price);
      Canvas.FillRectangleA(x,y,x+150,y-60,clr);
      
      _CommXY(x+5,y-55,"high = "+DoubleToString(price,_Digits));
      _Comment("bar = "+(string)bar);
      _Comment("time = " + TimeToString(iTime(_Symbol,PERIOD_CURRENT,bar))); 
   }
   Canvas.Update();
}


需要 iCanvas 1.54 版本才能运行。

附加的文件:
 
Nikolai Semko #:

运行需要 iCanvas 1.54 版本

Nikolai Semko#:
最新版本 1.53

我也很感兴趣。

 
Edgar Akhmadeev #:

我也在想同样的问题。

已更新并附在上一个帖子中