キャンバスがカッコいい! - ページ 90 1...8384858687888990919293 新しいコメント leon_17 2023.11.21 20:07 #891 Nikolai Semko #: キャンバスは、ピクセルの配列がバインドされたオブジェクトです。このピクセルの配列をバインドするのはリソースです(bool CCanvas::Create()を参照) キャンバスを常に削除して再作成するのは悪い習慣です。 キャンバスは必要なときに作成し、不要になったら削除するのが良い習慣です。例えば、プログラムの終了時などです。一度キャンバスオブジェクトを作成すれば、それをクリーンアップしたり、毎フレームピクセル配列を上書きしたり、キャンバスのサイズを変更したり、好きな場所に移動したりすることができます。 ありがとうございます、少しわかりやすくなりました。キャンバス・オブジェクトを作成した後、ObjectDelete() を使ってそのオブジェクトをチャートから削除すると、そのオブジェクトにバインドされたピクセル配列はそのまま残り、 ...という理解で合っていますか?再度別の名前で新しいキャンバスオブジェクトを作成すると、メモリ上に新しいピクセル配列が作成されるので、理論的にはメモリ全体を埋めることが可能なのでしょうか? それとも、古いピクセル配列は、最後に作成されたキャンバス・オブジェクトに毎回バインドし直されるだけなのでしょうか? Nikolai Semko 2023.11.21 20:51 #892 leon_17 #:ありがとうございます。キャンバス・オブジェクトを作成した後、ObjectDelete() を使ってそのオブジェクトをチャートから削除すると、そのオブジェクトにバインドされたピクセル配列はそのまま残り、......というのが正しい理解でしょうか?再度別の名前で新しいキャンバス・オブジェクトを作成すると、新しいピクセル配列がメモリ上に作成されるため、理論的にはすべてのメモリを一杯にすることが可能なのでしょうか? もちろん、オーナーレスリソースは増殖します。 leon_17#: あるいは、古いピクセル配列は、毎回、最後に作成された kanvas オブジェクトに再バインドされます。 あなたの想像力は素晴らしい。うらやましい。私ならそんなことは思いつかない。:)) ただし、所有者のいないリソースの名前を保存しておけば、それを新しいビットマップオブジェクトに再バインドすることができる。しかし、これは統合失調症の分野の話である。 Nikolai Semko 2023.11.21 21:32 #893 Nikolai Semko #:However, if you save the name of an ownerless resource, you can re-bind it to a new bitmap object.しかし、これは統合失調症の分野の話だ。 前言撤回。そんなことが役に立つケースを見つけたようだ。 leon_17 2023.11.21 21:49 #894 Nikolai Semko #: 撤回するよ。これが役に立つケースを見つけたと思う。 Destroy ()の 代わりにObjectDelete () を使用した場合、メモリ上で何が起こるのかを理解したかっただけです。そして、このような場合、新しい canvas オブジェクトに対して毎回新しい名前が生成されると、グラフィックリソース(所有者のいないピクセル配列やその他のもの)が増殖することに気づきました。 また、ObjectDelete() を使用した 後で、同じ名前の canvas オブジェクトを作成した場合、ピクセル配列は古いままなのでしょうか、それとも新しいままなのでしょうか? p.s. 質問はおそらく愚かなものだと思いますが、canvas のメカニズムを理解するために必要な のです。 Nikolai Semko 2023.11.21 21:51 #895 leon_17 #:ありがとうございます。Destroy ()の 代わりにObjectDelete () を使用した場合、メモリ上で何が起こるのかを理解したかったのです。そして、新しいcanvasオブジェクトに対して毎回新しい名前が生成される場合、グラフィカル・リソース(所有者のいないピクセル配列やその他の何か)が増殖することに気づきました。 これを確認するには、簡単なスクリプトを書けばよい。 leon_17 2023.11.21 21:54 #896 Nikolai Semko #: 簡単なスクリプトを書けばチェックできます。 方法を教えていただけますか? Nikolai Semko 2023.11.21 23:18 #897 leon_17 #:どうすればいいか教えてくれる? このように #define protected public #include <Canvas\Canvas.mqh> #undef protected void OnStart() { while(!IsStopped()) { int Width =(ushort)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS); // получаем Ширину окна int Height=(ushort)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS); // получаем Высоту окна CCanvas canvas; if(!canvas.CreateBitmapLabel("MyCanva"+string(rand()),0,0,Width,Height,COLOR_FORMAT_ARGB_NORMALIZE)) { Print("Error creating canvas: ",GetLastError()); } canvas.FillRectangle(rand()%Width/2,rand()%Height/2,Width/2+rand()%Width/2,Height/2+rand()%Height/2,ARGB(128,rand()%255,rand()%255,rand()%255)); canvas.Update(); Comment("Задействовано памяти: - " + string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+ " Mb"); Sleep(500); ObjectDelete(canvas.m_chart_id,canvas.m_objname); } } そしてコメントを見てください: このスクリプトを実行した後、ターミナルをリロードして、オーファンリソースのためにメモリを解放することを忘れないでください。 leon_17 2023.11.22 07:48 #898 Nikolai Semko #:こんな感じだ:そしてコメントを見てください:このスクリプトを実行した後、端末をリロードして、オーファンリソースのためにメモリを解放することを忘れないでください。 ありがとうございました! ターミナルをリロードするとオーファンリソースが削除されるというヒントをありがとう!このような多くのことは、私にはまだ明らかではありません。 p.s.この例はすべて完璧です!見るべきもの、考えるべきもの、実験する機会がある...。コードは短い。 leon_17 2023.11.22 19:35 #899 Expert Advisor で kanvas を使用している場合、 Expert Advisor を チャートから削除して ターミナルを閉じるときに Destroy() を実行する必要がありますか?確認方法もわかりません。固定されたオブジェクトを持つキャンバスのことです。そこではメモリの差はエラーの範囲内です(Destroy() を実行する場合としない場合。 Ihor Herasko 2023.11.22 19:53 #900 leon_17 Expert Advisor を チャートから削除して ターミナルを閉じるときに Destroy() を実行する必要がありますか?確認方法もわかりません。固定オブジェクトのキャンバスのことです。そこではメモリの差はエラーの範囲内(Destroy() を実行する場合としない場合。 実行する必要はありません。キャンバスのデストラクタでは自動的に実行されます: ~iCanvas() { Destroy(); ChartRedraw();}; 1...8384858687888990919293 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
キャンバスは、ピクセルの配列がバインドされたオブジェクトです。このピクセルの配列をバインドするのはリソースです(bool CCanvas::Create()を参照)
キャンバスを常に削除して再作成するのは悪い習慣です。
キャンバスは必要なときに作成し、不要になったら削除するのが良い習慣です。例えば、プログラムの終了時などです。
一度キャンバスオブジェクトを作成すれば、それをクリーンアップしたり、毎フレームピクセル配列を上書きしたり、キャンバスのサイズを変更したり、好きな場所に移動したりすることができます。
ありがとうございます、少しわかりやすくなりました。キャンバス・オブジェクトを作成した後、ObjectDelete() を使ってそのオブジェクトをチャートから削除すると、そのオブジェクトにバインドされたピクセル配列はそのまま残り、 ...という理解で合っていますか?再度別の名前で新しいキャンバスオブジェクトを作成すると、メモリ上に新しいピクセル配列が作成されるので、理論的にはメモリ全体を埋めることが可能なのでしょうか?
それとも、古いピクセル配列は、最後に作成されたキャンバス・オブジェクトに毎回バインドし直されるだけなのでしょうか?
ありがとうございます。キャンバス・オブジェクトを作成した後、ObjectDelete() を使ってそのオブジェクトをチャートから削除すると、そのオブジェクトにバインドされたピクセル配列はそのまま残り、......というのが正しい理解でしょうか?再度別の名前で新しいキャンバス・オブジェクトを作成すると、新しいピクセル配列がメモリ上に作成されるため、理論的にはすべてのメモリを一杯にすることが可能なのでしょうか?
もちろん、オーナーレスリソースは増殖します。
あるいは、古いピクセル配列は、毎回、最後に作成された kanvas オブジェクトに再バインドされます。
あなたの想像力は素晴らしい。うらやましい。私ならそんなことは思いつかない。:))
ただし、所有者のいないリソースの名前を保存しておけば、それを新しいビットマップオブジェクトに再バインドすることができる。しかし、これは統合失調症の分野の話である。
However, if you save the name of an ownerless resource, you can re-bind it to a new bitmap object.しかし、これは統合失調症の分野の話だ。
撤回するよ。これが役に立つケースを見つけたと思う。
Destroy ()の 代わりにObjectDelete () を使用した場合、メモリ上で何が起こるのかを理解したかっただけです。そして、このような場合、新しい canvas オブジェクトに対して毎回新しい名前が生成されると、グラフィックリソース(所有者のいないピクセル配列やその他のもの)が増殖することに気づきました。
また、ObjectDelete() を使用した 後で、同じ名前の canvas オブジェクトを作成した場合、ピクセル配列は古いままなのでしょうか、それとも新しいままなのでしょうか?
p.s. 質問はおそらく愚かなものだと思いますが、canvas
のメカニズムを理解するために必要な のです。
ありがとうございます。Destroy ()の 代わりにObjectDelete () を使用した場合、メモリ上で何が起こるのかを理解したかったのです。そして、新しいcanvasオブジェクトに対して毎回新しい名前が生成される場合、グラフィカル・リソース(所有者のいないピクセル配列やその他の何か)が増殖することに気づきました。
簡単なスクリプトを書けばチェックできます。
方法を教えていただけますか?
どうすればいいか教えてくれる?
このように
そしてコメントを見てください:
このスクリプトを実行した後、ターミナルをリロードして、オーファンリソースのためにメモリを解放することを忘れないでください。
こんな感じだ:
そしてコメントを見てください:
このスクリプトを実行した後、端末をリロードして、オーファンリソースのためにメモリを解放することを忘れないでください。
ありがとうございました!
ターミナルをリロードするとオーファンリソースが削除されるというヒントをありがとう!このような多くのことは、私にはまだ明らかではありません。
p.s.この例はすべて完璧です!見るべきもの、考えるべきもの、実験する機会がある...。コードは短い。
実行する必要はありません。キャンバスのデストラクタでは自動的に実行されます:
~iCanvas() { Destroy(); ChartRedraw();};