帆布很酷! - 页 83

 

感谢所有提出解决方案的人。我需要一些时间来测试一切,并将其应用到我的产品中。对于简单的产品,我需要在更复杂的产品上进行测试。计时器的想法非常好。虽然不能解决所有问题,但可以解决我遇到的其他问题。

我没有忽视任何人。下周我就能回答哪些可行,哪些不可行。

 
Canvas based indicators: Filling channels with transparency
Canvas based indicators: Filling channels with transparency
  • www.mql5.com
In this article I'll introduce a method for creating custom indicators whose drawings are made using the class CCanvas from standard library and see charts properties for coordinates conversion. I'll approach specially indicators which need to fill the area between two lines using transparency.
 
Nikolai Semko #:

是的,但有一点细微差别没有记录在案。
如果使用 alpha 通道(COLOR_FORMAT_ARGB_NORMALIZE),在创建位图之前必须将其填充为零。

否则字符的边缘就会 "参差不齐"。

谢谢。


感谢您 在 Canvas 上的无私奉献

我学到了很多东西,并将画布应用到了我的 mt4 非标准图表中(例如 Renko),取代了数千个图表对象。

 
Jon_G #:

谢谢。


感谢您 在 Canvas 上的无私奉献

我学到了很多东西,并将画布应用到了我的 mt4 非常规图表中(例如 Renko),取代了数千个图表对象。

感谢您的赞誉。

是的,数以千计的对象会让界面变得异常缓慢。
这是 MetaQuotes 的一个严重疏忽。
一个良好的画布即使有 10,000 个虚拟对象也不会造成延迟。

 

代码库

PNG

Nikolai Semko, 2023.07.15 07:24

忘掉 BMP 文件就像一场噩梦。有了这个库,你就可以在程序中使用更先进、更小巧的 PNG 图像格式了。

我终于实现了 c PNG。
我从@Zorro(https://www.mql5.com/ru/forum/92113#comment_2672596)
获得了实现方法,请查看。到目前为止,我还没有遇到任何故障。



 
Nikolai Semko #:
终于实现了 c PNG。 。

很酷,很实用。只是出于兴趣,它能在 MT4 中使用吗?

 
Vitaliy Kuznetsov #:

很酷,很实用。我想问一下,这可以在 MT4 中使用吗?

当然可以
我试试看。我认为代码几乎保持不变。
 

尼古拉,你在 kanvas 上找到允许滚动窗口的代码了吗?


 
Vitaliy Kuznetsov #:

尼古拉,你在 kanvas 上找到允许滚动窗口的代码了吗?


AnatolyPyotr 已经实现了

但我还没用过。所以我无法判断。

 
我想用 Canvas 类创建一个用户界面。唯一的问题是我不知道如何让仪表盘在图表上移动。
我搜索了很多,但没有找到任何示例。如果您能给我一点提示,我将感激不尽。


//+------------------------------------------------------------------+
//|                                                 Canvas Panel.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0

#include <Canvas\Canvas.mqh>
CCanvas  canvas;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create canvas
   if(!canvas.CreateBitmapLabel(0, 0, "Dashboard", 40, 40, 400, 200, COLOR_FORMAT_ARGB_NORMALIZE))
   {
      Print("Error creating canvas: ", GetLastError());
      return(INIT_FAILED);
   }
   
   canvas.Erase(ColorToARGB(clrGray, 200));
   canvas.Update(true);

   ChartSetInteger(0, CHART_EVENT_MOUSE_MOVE, true);

//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy application dialog
   canvas.Destroy();
   ChartRedraw();
}
//+------------------------------------------------------------------+
//| 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);
}
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{

}

//+------------------------------------------------------------------+
附加的文件:
screenshot.png  18 kb