キャンバスがカッコいい! - ページ 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 #:

そう、ちょっとだけ文書化されていないニュアンスがある。
アルファチャンネル(COLOR_FORMAT_ARGB_NORMALIZE)を使用する場合は、ビットマップを作成する前に、ゼロではなくアルファチャンネルを塗りつぶさなければなりません。

そうしないと、文字のエッジが「ギザギザ」になってしまいます。

ありがとう。


そして、Canvasに関するあなたの無私の 仕事に感謝 します。

私は多くのことを学び、mt4の非正規チャート(例えばRenko)にキャンバスを導入し、何千ものチャート・オブジェクトを置き換えることができました。

 
Jon_G #:

ありがとう。


そして、キャンバスでのあなたの無私の仕事に 感謝 します。

私は多くのことを学び、mt4の非正規チャート(例えばRenko)にcanvasを導入し、何千ものチャート・オブジェクトを置き換えることができました。

ありがたいお言葉をありがとうございます。

はい、何千ものオブジェクトがあると、インターフェイスが信じられないほど遅くなります。
これはMetaQuotesの重大な見落としです。
よく作られたキャンバスは、10,000の仮想オブジェクトがあってもラグを起こしません。

 

コードベース

PNG

ニコライ・セムコ, 2023.07.15 07:24

BMPファイルなんて夢のまた夢。このライブラリを使えば、あなたのプログラムで、より高度でコンパクトなPNG画像フォーマットを使えるようになります。


実装は@Zorro(https://www.mql5.com/ru/forum/92113#comment_2672596)
に教えてもらいました。今のところ不具合はありません。



 
Nikolai Semko #:

.

クールで便利。ちょっと興味があるのですが、MT4で使えますか?

 
Vitaliy Kuznetsov #:

クールで便利です。ちょっと興味があるのですが、これはMT4で使えますか?

もちろん
試してみます。コードはほとんど変わらないと思います。
 

Nikolai, have you found somewhere ready code on kanvas that allows to scroll the window?


 
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
理由: