エラー、バグ、質問 - ページ 2801 1...279427952796279727982799280028012802280328042805280628072808...3185 新しいコメント Nikolai Karetnikov 2020.07.12 23:12 #28001 Roman:Print()だけで試してみてください。そして、printfも動作するようです。 printfでは、第1引数に表示する値の種類を指定します。 印刷が 効く!ありがとうございました。)) しかし、printfは常に動作するわけではありません Igor Makanu 2020.07.13 09:54 #28002 キャンバス上に1つのキャラクターを表示し、移動させたいのですが、ソースは? #property indicator_chart_window #property indicator_plots 0 #include <Canvas\Canvas.mqh> CCanvas canvas; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { canvas.CreateBitmapLabel(ChartID(), 0, "canvas", 0, 0, 900, 400); canvas.FontSet("Courier New", 32); canvas.Erase(0); canvas.Update(); EventSetMillisecondTimer(250); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { static int x = 0; static const uint col_black = ColorToARGB(clrBlack); static const uint col_red = ColorToARGB(clrRed); canvas.TextOut(x, 100, "S", col_black); x+=10; canvas.TextOut(x, 100, "S", col_red); canvas.Update(); } //+------------------------------------------------------------------+ なぜ、前のレンダリング画像を黒で上書きして しまい、アーティファクトが残ってしまうのでしょうか? Andrey Barinov 2020.07.13 09:59 #28003 Igor Makanu:キャンバス上に1つのキャラクターを表示し、移動させたいのですが、ソースは?前のレンダリング画像を黒で 上書きしても、アーチファクトが発生するのはなぜですか? 一度にキャンバス全体を塗り直す方がよいでしょう。キャンバス全体を一度に再描画したほうがよいでしょう。 Igor Makanu 2020.07.13 10:13 #28004 Andrey Barinov:カンヴァ全体を一度に詰め替えたほうがいい。どうせ後から全部描き直すんだから。 すでに考えてはいるのですが、純粋に技術的な質問です フォントのアンチエイリアスが効いているのか、スプライトを動かすのが目的なのか、一般的に、なぜそうなるのか理解したいです。 Igor Zakharov 2020.07.13 11:35 #28005 どこを掘っていいのかわかりません、どなたか検索の方向を教えてください。 インジケーターを書いているのですが、最初に「コンパイル」をクリックした後、計算部分が無意味なものを出し、もう一度コンパイルすると本当らしいのですが、どうしたらいいでしょうか? 2020.07.13 14:12:05.987 ZigZag_MP (USDJPY,M15) Average wave size = -2147483648 points; less then average: 1/100 min=99999999.0 max=107.1 steps=-2147483648 2020.07.13 14:12:27.179 ZigZag_MP (USDJPY,M15) Average wave size = 273 points; less then average: 65/100 min=106.422 max=107.848 steps=57 2020.07.13 14:18:38.001 ZigZag_MP (USDJPY,M15) Average wave size = -2147483648 points; less then average: 1/100 min=99999999.0 max=107.1 steps=-2147483648 2020.07.13 14:18:46.751 ZigZag_MP (USDJPY,M15) Average wave size = 273 points; less then average: 65/100 min=106.422 max=107.848 steps=57 特別なことはしていません。ただ、過去100回のジグザグニーを計算しているだけです。 何度もコードを逆にしてみましたが、同じなのに結果が違うということです。 インジケーターバッファは 強制的に初期化され、ゴミは入りません。 Igor Makanu 2020.07.13 12:13 #28006 Igor Zakharov:インジケータ・バッファは 強制的に初期化され、その中にゴミはありません。 問題は、どこで初期化するかです。 prev_calculated == 0 ならば問題なし、OnInt() にある場合は、TF の切り替え時やコンパイル時に不具合が発生します。 Igor Zakharov 2020.07.13 13:49 #28007 Igor Makanu:問題は、どこで初期化するかです。prev_calculated == 0 であれば問題ないが、OnInt() であれば、TFの切り替え時やコンパイル時に不具合が発生する。 ループの中で各値が個別に割り当てられます。データウィンドウで 確認しましたが、変な値やゴミのような値はありませんでした。 Mihail Matkovskij 2020.07.13 15:46 #28008 Igor Makanu:キャンバス上に1つのキャラクターを表示し、移動させたいのですが、ソースは?なぜ、前のレンダリング画像を黒く塗りつぶすと、アーティファクトが残るのでしょうか? それは、アンチエイリアスのせいです。最も確実な方法は、シンボルの上に、背景色 で長方形を描くことです。そして、新しい座標を持つシンボルを出力します。このような場合、通常はこのようなことが行われます。 Nikolai Semko 2020.07.13 17:58 #28009 Igor Makanu: Mihail Matkovskij: これは、アンチエイリアシングのためです。最も確実な方法は、シンボルの上に、背景色 で長方形を描くことです。そして、新しい座標を持つシンボルを出力します。このような場合、通常はこのようなことが行われます。 再描画やペイントを必要としない、シンプルなムービングカンヴァスも忘れてはいけません。 これが一番手っ取り早い引っ越し方法です。 #include <Canvas\iCanvas.mqh> //https://www.mql5.com/ru/code/22164 void OnStart() { // Формируем какой-то фон for (int i = 0; i<1000; i++) Canvas.Circle(rand()%2048, rand()%2048,50+rand()%50,ARGB(255,rand()%256,rand()%256,rand()%256)); Canvas.Update(); // ----------------------- int x=100, y=100; iCanvas c(0,x,y,"symbol",50,50); // создаем дополнительный канвас размером 50х50 c.TextPosition(0,0); c.CurentFont("Tahoma",50); c.Comm("S"); c.Update(); while(!IsStopped()&& x<W.Height) { c.MoveCanvas(++x,++y); // перемещаем данный канвас c.Update(); Sleep(50); } } Mihail Matkovskij 2020.07.13 19:07 #28010 Nikolai Semko:再描画やオーバーペイントをすることなく、キャンバスを簡単に移動できることも忘れてはいけません。 これが最速の移動手段です。誰も否定はしていない。ただ、キャンバスとして1つの画面があるというコンセプトはあります。今度は、同じカスタムキャンバス(画素の配列)をウィンドウキャンバス(チャート)に描画します。より正確には、まず ResourceCreate を使って(OBJ_BITMAP またはOBJ_BITMAP_LABEL で)チャートに渡される(コピーされる)。チャートウィンドウでは、すべてWin APIを使って描画されます(私の勘違いでなければ)。ただし、他のAPIを使用しても可能です。しかし、CCanvas クラスは、m_pixels 配列の要素に描画する独自のメソッドを持っています。 小さな矩形を描画しても、ResourceCreateを 使用して多くのピクセルを渡さなければならないことがわかりました(描画時のみ時間を節約できます)。そして、この方法では、 m_pixels配列を 処理してOBJ_BITMAP_LABELにコピーすることなく、単にOBJ_BITMAP_LABELをチャート上で 移動させることができます。 1...279427952796279727982799280028012802280328042805280628072808...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
Print()だけで試してみてください。
そして、printfも動作するようです。
printfでは、第1引数に表示する値の種類を指定します。
印刷が 効く!ありがとうございました。))
しかし、printfは常に動作するわけではありません
キャンバス上に1つのキャラクターを表示し、移動させたいのですが、ソースは?
なぜ、前のレンダリング画像を黒で上書きして しまい、アーティファクトが残ってしまうのでしょうか?
キャンバス上に1つのキャラクターを表示し、移動させたいのですが、ソースは?
前のレンダリング画像を黒で 上書きしても、アーチファクトが発生するのはなぜですか?
一度にキャンバス全体を塗り直す方がよいでしょう。キャンバス全体を一度に再描画したほうがよいでしょう。
カンヴァ全体を一度に詰め替えたほうがいい。どうせ後から全部描き直すんだから。
すでに考えてはいるのですが、純粋に技術的な質問です
フォントのアンチエイリアスが効いているのか、スプライトを動かすのが目的なのか、一般的に、なぜそうなるのか理解したいです。
どこを掘っていいのかわかりません、どなたか検索の方向を教えてください。 インジケーターを書いているのですが、最初に「コンパイル」をクリックした後、計算部分が無意味なものを出し、もう一度コンパイルすると本当らしいのですが、どうしたらいいでしょうか?
特別なことはしていません。ただ、過去100回のジグザグニーを計算しているだけです。 何度もコードを逆にしてみましたが、同じなのに結果が違うということです。
インジケーターバッファは 強制的に初期化され、ゴミは入りません。
インジケータ・バッファは 強制的に初期化され、その中にゴミはありません。
問題は、どこで初期化するかです。
prev_calculated == 0 ならば問題なし、OnInt() にある場合は、TF の切り替え時やコンパイル時に不具合が発生します。
問題は、どこで初期化するかです。
prev_calculated == 0 であれば問題ないが、OnInt() であれば、TFの切り替え時やコンパイル時に不具合が発生する。
ループの中で各値が個別に割り当てられます。データウィンドウで 確認しましたが、変な値やゴミのような値はありませんでした。
キャンバス上に1つのキャラクターを表示し、移動させたいのですが、ソースは?
なぜ、前のレンダリング画像を黒く塗りつぶすと、アーティファクトが残るのでしょうか?
それは、アンチエイリアスのせいです。最も確実な方法は、シンボルの上に、背景色 で長方形を描くことです。そして、新しい座標を持つシンボルを出力します。このような場合、通常はこのようなことが行われます。
これは、アンチエイリアシングのためです。最も確実な方法は、シンボルの上に、背景色 で長方形を描くことです。そして、新しい座標を持つシンボルを出力します。このような場合、通常はこのようなことが行われます。
再描画やペイントを必要としない、シンプルなムービングカンヴァスも忘れてはいけません。
これが一番手っ取り早い引っ越し方法です。
再描画やオーバーペイントをすることなく、キャンバスを簡単に移動できることも忘れてはいけません。
これが最速の移動手段です。
誰も否定はしていない。ただ、キャンバスとして1つの画面があるというコンセプトはあります。今度は、同じカスタムキャンバス(画素の配列)をウィンドウキャンバス(チャート)に描画します。より正確には、まず ResourceCreate を使って(OBJ_BITMAP またはOBJ_BITMAP_LABEL で)チャートに渡される(コピーされる)。チャートウィンドウでは、すべてWin APIを使って描画されます(私の勘違いでなければ)。ただし、他のAPIを使用しても可能です。しかし、CCanvas クラスは、m_pixels 配列の要素に描画する独自のメソッドを持っています。
小さな矩形を描画しても、ResourceCreateを 使用して多くのピクセルを渡さなければならないことがわかりました(描画時のみ時間を節約できます)。そして、この方法では、 m_pixels配列を 処理してOBJ_BITMAP_LABELにコピーすることなく、単にOBJ_BITMAP_LABELをチャート上で 移動させることができます。