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

 
Mighty7:

背景をすべて消し、新しいものを作り、塗装するには時間がかかりすぎる。

それほどでもない。構築には多くの時間がかかる。

状態をメモリに保持しているので(要素の位置や色など)、たとえば要素を移動させたい場合は、その座標を変更してキャンバスを消去し、新しい状態を描画します。視覚的には、要素の数が多くても光速に見えます )

 
Mighty7:

私のキャンバスはフルスクリーンなので、それはうまくいきません。これはティックチャートのようなものなのですが、背景をすべて消して構築し、すべてを新しくペイントするには時間がかかりすぎるため、コンテンツを左(たとえば8ピクセル)に移動し、新しい8ピクセル(x方向に8ピクセル、高さいっぱい)だけを新しいデータで描画する必要があります。MoveCanvasでキャンバスを左に8ピクセル移動させようとしたところ、うまくいきましたが、左から8ピクセルの幅が削除され、右から8ピクセルが追加されるようにサイズを変更することができません。お分かりいただけたでしょうか?

Mighty7:

キャンバスがフルスクリーンなので、うまくいきません。ティックチャートのようなものなのですが、背景を完全に消して、すべてを新しく構築して描くには時間がかかりすぎますので、コンテンツを左(たとえば8ピクセル)に移動して、新しい8ピクセル(x方向に8ピクセル、高さいっぱい)だけを新しいデータで描画する必要があります。MoveCanvasでキャンバスを左に8ピクセル移動させようとしたところ、うまくいきましたが、左から8ピクセルの幅が削除され、右に8ピクセルが追加されるようなリサイズができません。お分かりいただけたでしょうか?

わかりました。バージョン1.42をダウンロードしてください。
しかし、垂直方向のリサイズを制御する必要があります。

わかりました。自分でバージョン1.42をダウンロードしてください。
しかし、垂直スケールの変更を制御する 必要があります。

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

input int shift = -1;
//+------------------------------------------------------------------+
int OnInit() {
   EventSetMillisecondTimer(100);
   Canvas.Erase(0x00FFFFFF);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnTimer() {
   Canvas.FillCircle(rand()%_Width,rand()%_Height, 10+rand()%100,Canvas.Grad(rand()/32767.0)&0x80FFFFFF);
   Canvas.ShiftCanvas(shift);
   Canvas.Update();
   
}
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[]) {
   return(rates_total);
}
void              ShiftCanvas(const int _shift=-1, uint bckgr = 0x00FFFFFF) { // キャンバス全体を左にシフトするか(x は負の値)、次のようにシフトします。
                     // 右に移動する(x は正の値)。キャンバス自体はそのままですが、すべてのピクセルがシフトされます。bckgr は 
                     // シフトの方向に応じて、新しく作成されたストライプを左または右に塗りつぶす色。
                        if (_shift==0) return;
                        int _Shift = Fabs(_shift);
                        if (_Shift>=m_width) { ArrayInitialize(m_pixels,bckgr); return;}
                        int start = (_shift>0)?0:-_shift;
                        int count = m_width-_Shift;
                        int offset= (_shift>0)?0:count;
                        for (; start<m_height*m_width; start+=m_width, offset+=m_width) {                        
                           ArrayCopy(m_pixels,m_pixels,start+_shift,start,count); 
                           ArrayFill(m_pixels,offset,_Shift,bckgr);
                        }                        
                     }



ファイル:
 
素晴らしい。ありがとうございました。
 
Mighty7:
素晴らしい。ありがとうございます。
問題ありません😊。
 
Nikolai Semko:
問題ありません😊。

チャームのように動作しますが、完全なものにするために、Y軸(南北)で
、シフトも実装することは可能ですか?これらの方向にもスクロール/シフトする必要があります。

 
Mighty7:

それはチャームのように動作しますが、それを完了させるために、Y軸(北/南)で
、シフトも実装することは可能ですか?これらの方向にもスクロール/シフトする必要があります。

わかりました。やってみます。

 
Mighty7:

それはチャームのように動作しますが、それを完了させるために、Y軸(北/南)で
、シフトも実装することは可能ですか?これらの方向にもスクロール/シフトする必要があります。

完了

バージョン1.43

ファイル:
 
Nikolai Semko :

げた

1.43を参照

本当に素晴らしい。本当にありがとう。

編集:x=-1,y=0がシフトしていないので、正しく動作していません。

 
Mighty7:

本当に素晴らしい。本当にありがとう。

編集:x=-1,y=0がシフトしていないので、正しく動作していません。

ありがとう。修正しました。

ファイル:
iCanvas.mqh  52 kb
 
Nikolai Semko:

ありがとう。修正しました。

ありがとう。これで完璧だ。最高の仕事だ。