キャンバスがカッコいい! - ページ 28 1...212223242526272829303132333435...93 新しいコメント Nikolai Semko 2019.09.12 15:20 #271 Evgeny Potapov:ありがとうございました。このオプションはかなりリアルに見えますね この質問に答えることで、私は知らなかったとても重要なことに気づいたからです。 全く知らない人がいたら驚きです。 ObjectSetIntegerを 使用してキャンバスやその位置のサイズを変更した場合、再描画する必要はありません。 生成されたキャンバスをリサイズして元に戻しても、キャンバスのデータは元の描画が保持されます。 シェイプドカンヴァスのサイズを大きくするとデータは消えてしまいますが、元のサイズに戻すと再び表示されます。 カンヴァスのサイズを変更したり、位置を変えたりする場合、Update() や ChartRedraw() を実行する必要さえなく、新しいティックやウィンドウの変更に伴って更新されることになります。 この指標はそれを示しています。キャンバスは一度だけ生成されます。しかし、そのサイズと位置は変更可能で、値の配列は保持される。マウスを画面上に移動させるだけ #property indicator_chart_window #define protected public // увы, это необходимо, чтобы расширить наши возможности #include <Canvas\Canvas.mqh> #undef protected CCanvas C; int OnInit() { if(!C.CreateBitmapLabel(0,0,"_Canvas",100,100,600,400,COLOR_FORMAT_ARGB_NORMALIZE)) Print("Error creating canvas: ",GetLastError()); DrawCanvas(600,400); ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { C.Destroy(); } //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, const int prev_calculated, const int begin, const double& price[]) { return prev_calculated; } void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam) { if (id==CHARTEVENT_MOUSE_MOVE) DrawCanvas((int)lparam,(int)dparam); } //+------------------------------------------------------------------+ void DrawCanvas(int x, int y) { static bool first=true; //Comment(string(x)+" " +string(y)); ObjectSetInteger(C.m_chart_id,C.m_objname,OBJPROP_XDISTANCE,x/5); ObjectSetInteger(C.m_chart_id,C.m_objname,OBJPROP_YDISTANCE,y/5); ObjectSetInteger(C.m_chart_id,C.m_objname,OBJPROP_XSIZE,x); ObjectSetInteger(C.m_chart_id,C.m_objname,OBJPROP_YSIZE,y); if(first) // канвас формируется только один раз { C.Erase(); C.FillCircle(100,100,70,ColorToARGB(clrViolet,200)); C.FillCircle(300,200,100,ColorToARGB(clrLightBlue,100)); C.Rectangle(140,50,250,150,ColorToARGB(clrAqua)); C.Update(); first=false; } ChartRedraw(); // можно обойтись и без этого, но тогда перерисовка будет только с каждым тиком или изменением чарта } ファイル: TestResizeCanvas.mq5 5 kb Andrey Dik 2019.09.12 18:49 #272 は、ビデオに保存することは可能ですか? Nikolai Semko 2019.09.12 18:57 #273 Andrey Dik: ビデオに保存できますか? よろしい Andrey Dik 2019.09.12 18:59 #274 Nikolai Semko: よろしい 100万枚の画像を作って、それをビデオエディターで組み立ててビデオにする、みたいなやり方でなければいいのですが......。) 差し支えなければ、詳しく教えてください。 Nikolai Semko 2019.09.12 19:24 #275 Andrey Dik: 100万枚の画像を作って、それをビデオエディターで組み立ててビデオにする、みたいなやり方でなければいいのですが......。) 差し支えなければ、詳しく教えてください。 いいえ、もちろんそんなことはありません。 そうなります。 Andrey Dik 2019.09.12 20:01 #276 Nikolai Semko: いいえ、もちろんそんなことはありません。 めんどくさいから。 コードはいらないから、どうすればいいのかヒントをくれ。 Andrey Khatimlianskii 2019.09.12 20:14 #277 Nikolai Semko: キャンバスのサイズを変更したり、位置を変更した場合、Update()やChartRedraw()を実行しなくても、新しいティックやウィンドウの 変更に伴って更新されます。 まあ、これらのイベントに応じて、端末が 勝手にChartRedraw()を呼び出すわけですが;) Nikolai Semko 2019.09.12 20:17 #278 Andrey Dik: コード不要、ヒントあり どのような映像を撮りたいかによって、さまざまな選択肢があります。マウスポインタ、インジケータ、オブジェクト、GUIでリアルタイムにウィンドウの中で何が起こっているのか?それとも他の何か? Darirunu 2019.09.12 20:18 #279 このチップの本当の効用は何なのでしょうか?価格チャートのパターンを見つけることは、取引に役立つのでしょうか? Nikolai Semko 2019.09.12 20:28 #280 Andrey Khatimlianskii: まあ、ターミナル 自体がこれらのイベントで ChartRedraw() を呼び出すのですが ;) それはわかるのですが、ただ、細かいことは言いたくなかったのです。 chartRedraw()ではキャンバスオブジェクトは再描画されず、Update() の時にのみ再描画されるので注意を喚起したのです。また、ObjectSetInteger を使ってキャンバスオブジェクトを再描画する場合は、ChartRedraw() が発生したときに、強制的に ChartRedraw() を実行するか、チャートの変化や新しいティックの到来を待てばよいのです。 1...212223242526272829303132333435...93 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ありがとうございました。このオプションはかなりリアルに見えますね
この質問に答えることで、私は知らなかったとても重要なことに気づいたからです。
全く知らない人がいたら驚きです。
ObjectSetIntegerを 使用してキャンバスやその位置のサイズを変更した場合、再描画する必要はありません。
この指標はそれを示しています。キャンバスは一度だけ生成されます。しかし、そのサイズと位置は変更可能で、値の配列は保持される。マウスを画面上に移動させるだけ
ビデオに保存できますか?
よろしい
100万枚の画像を作って、それをビデオエディターで組み立ててビデオにする、みたいなやり方でなければいいのですが......。)
差し支えなければ、詳しく教えてください。
100万枚の画像を作って、それをビデオエディターで組み立ててビデオにする、みたいなやり方でなければいいのですが......。)
差し支えなければ、詳しく教えてください。
いいえ、もちろんそんなことはありません。
そうなります。
いいえ、もちろんそんなことはありません。
めんどくさいから。
コードはいらないから、どうすればいいのかヒントをくれ。
まあ、これらのイベントに応じて、端末が 勝手にChartRedraw()を呼び出すわけですが;)
コード不要、ヒントあり
どのような映像を撮りたいかによって、さまざまな選択肢があります。マウスポインタ、インジケータ、オブジェクト、GUIでリアルタイムにウィンドウの中で何が起こっているのか?それとも他の何か?
まあ、ターミナル 自体がこれらのイベントで ChartRedraw() を呼び出すのですが ;)
それはわかるのですが、ただ、細かいことは言いたくなかったのです。
chartRedraw()ではキャンバスオブジェクトは再描画されず、Update() の時にのみ再描画されるので注意を喚起したのです。また、ObjectSetInteger を使ってキャンバスオブジェクトを再描画する場合は、ChartRedraw() が発生したときに、強制的に ChartRedraw() を実行するか、チャートの変化や新しいティックの到来を待てばよいのです。