ライブラリ: イージーキャンバス - ページ 8

 
Nikolai Semko:

名前の変更は難しくない。Ctrl+H

しかし、私はアンドレイに同意する。define T または #include <CanvasiCanvas.mqh> を探し、プロジェクトの最初に置く。

ファイルの検索は自動的に行われます)MQL5フォルダ内のどのファイルにも#define Tは ありません。

TradeTransactionshttps://www.mql5.com/ja/code/22166 の TypeToBytes.mqh にある何かとコンフリクトしていることがわかりました

このライブラリは長い間変更されていないため、新しいビルドで何らかの技術革新やバグが発生した可能性が高いです。)

 
Oleksii Chepurnyi:

TradeTransactions(https://www.mql5.com/ja/code/22166)のTypeToBytes.mqhの何かがコンフリクトしていることがわかった。

このライブラリは長い間変更されていないので、おそらく新しいビルドで新しい機能やバグが現れたのでしょう。)

これはコンパイラのバグです。

#include <TypeToBytes.mqh> //https://www.mql5.com/ja/code/16282

class CLASS
{
  void Method()
  {
    datetime T[1];
    
    T[0] = 0; // '[' - 期待される名前
  };
};

void OnStart()
{
  datetime T[1];
  
  T[0] = 0; // OK
}
 
了解。ありがとう。もちろん、修正するよ。
 

やった、見つけたよ!)


fxsaber さんは、自動的な何かで「自分の」キーワードのブランチを追跡しているのですか、それとも定期的にすべてのブランチをスクロールしているのですか?あなたは "的を絞った "質問にはとても素早く答えてくれますね。

 
Andrey Khatimlianskii:

fxsaberさん、あなたは「あなたの」キーワードのブランチを自動的な何かで追跡しているのですか、それとも定期的にすべてのブランチをスクロールしているのですか?あなたは "的を絞った "質問には素早く答えていますね。

それは偶然です。

 


このコミュニティの有名なプログラマからこんな質問を受けました:

- なぜテスター モードでは、オブジェクト上に作成されたパネルが、カンヴァス上に実現されたパネルよりも桁違いに速く再描画されるのですか。

分析した結果、この問題の理由と解決策がわかりました。

オブジェクトの再描画は画面全体の再描画と一緒に行われ、テスターの画面は毎秒 30 フレーム以上の頻度で再描画されないということです。

オブジェクトは最終的には同じキャンバス(内部)ですが、オブジェクトのプロパティを 変更すると、オブジェクトのキャンバスは形成されず(再計算されず)、画面の更新(ChartRedraw)の瞬間にのみ形成されます。

パネルが目盛りごとに変化すると仮定しましょう。この場合、デフォルトのテスターでは、tick ごとに canvas が再計算されますが、テスターでの再描画の頻度はまだ ~30 ミリ秒(~30 フレーム/秒)以下です。

言い換えれば、キャンバスは実際に画面に表示されるよりもはるかに頻繁に再計算されるため、リソースの過度の消費が発生します。

この問題の解決策は、再計算とカンヴァスの再描画の頻度を、コンピュータ時間の 15 ~ 30 ミリ秒に 1 回以下に制御することです。

たとえば、次のようにします:

void OnTick()
  {
  static uint lastCalc=0;
  uint cur=GetTickCount();
  if (cur-lastCalc>15) {
    ReDrawMyCanvas();
    lastCalc=cur;
   }
  }
 

こんにちは。

   if(width==0) {width=W.Width;   FullWinCanvW=true; Xpos=0;} else FullWinCanvW=false;
   if(height==0){height=W.height[SubWin]; FullWinCanvH=true; Ypos=0;} else FullWinCanvH=false;
   Name+=IntegerToString(rand())+IntegerToString(rand());
   Handle=ChartGetInteger(chart_id,CHART_WINDOW_HANDLE,SubWin);
   if(!CreateBitmapLabel(chart_id,SubWin,Name,Xpos,Ypos,width,height,formatCF))
      Print("Error creating canvas: ",GetLastError());

コンストラクタのこの行、なぜ?

CCanvas は、rand も含めて、名前に多くのものを追加します。時々、名前が長すぎて許容される長さを超えてしまいます )

 
Oleksii Chepurnyi:

こんにちは。

コンストラクタのこの行、なぜですか?

CCanvas は、rand も含めて、名前に多くのものを追加します。時々、名前が長すぎて許容される長さを超えてしまう )


iCanvas の私のバージョンではすでに修正済みですが、ここでは忘れていたようです。

 
Version 1.40
いくつかのバグを修正しました。
特に、iCanvasオブジェクトが複数の場合、自動的に縦方向にリサイズされないバグを修正しました。
 
最終バージョン1.40
ファイル:
iCanvas.mqh  48 kb