Canvasでクラウドソーシングのプロジェクトを作る - ページ 8

 
o_O:

OKです。

CFrameはクリアです。

---

GUIブロックがそれぞれビットマップで表現されるような道を歩んでいたんですね。

これを読んでいる人、すでに考え始めている人のための重要なポイント:
は、1つのビットマップでのみ動作し、すべての GUI 要素はその上にレンダリングされる必要があります。
この場合、レンダリングの可能性が広がります。(シャドウ、グラデーションなど)
また、制御は簡略化されています(MTオブジェクトのレベルまではいきません)

IMHOでは、個々のアプリケーションウィンドウ(ダイアログ)は、チャート上に独自のビットマップとオブジェクトを持つべきです(複数のEAやインジケータが単一のビットマップリソースを「レイプ」するケースは考慮しないでください)。
この場合、ウィンドウの影をアルファチャンネルのビットマップとして実装することで、この影を計算するための計算負荷をなくすことができる。


CHARTEVENT_MOUSE_MOVEでマウスイベントを監視しています。
マウスの入力品質を損なわずに他のイベントを使用することはできませんでした。
 
私のMQLプロジェクトでは、GUIライブラリをWPFのような、マークアップやイベントをテキストファイル(例えばXML)で記述するようなものにしたいと思っています。

あとは、テキストファイルの記述に従って、GUIエンジンが呼び出すイベントを実装するだけです。
 
Zorro:
IMHOでは、個々のアプリケーションウィンドウ(ダイアログ)は、チャート上に独自のビットマップとオブジェクトを持つべきです(複数のEAやインジケータが1つのビットマップリソースを「悪用」するケースは考慮しないでください)。
この場合、ウィンドウの影をアルファチャンネルのビットマップとして実装することで、この影を計算するための計算負荷をなくすことができる。
1つのウィンドウのすべてのGUI要素は、Z順序とネストを考慮してそのビットマップに描画されます(GUIオブジェクトのネストをどのように呼ぶのかわかりません)。

が正しいです。

また、「すべてのダイアログ」ではなく、「エキスパート/インジケーターごとに1つのビットマップ」とすることを追加します。 もっと多くすることも可能ですが、それはコーダーの裁量によります。

ビットマップ上に作業用のダイアログがあるときに、同じビットマップ上にモーダルウィンドウを追加したり、同じビットマップ上に別のダイアログを追加したりするのは、テクニックの問題であって、今さら原則ではないと私は思います。

まず、どの窓がどこにあるかなど、具体的な情報を持たない抽象的なモデルを作成します。

そうすれば、さまざまな機能や動作をすべてカバーできるようになります

 
o_O:

コーダーの皆さん、こんにちは。

本当に役に立つことをするために、面白いタスクがあり、クラウドソーシングも良い選択肢になると思うのです。
まず、早い段階で誰でも結果がわかるようになります。2つ目は、MQLを使って新しいものを作ることです。そして、もしかしたら、MTの開発者に新しいグッズをお願いすることになるかもしれません。

----

そこで、まず基本的な作業を紹介します。

1.ボタンのクラス(GButtonとします。既存のボタンと混同しないように接頭辞にGをつけます)を作る必要があります。
- 今のところボタンはテキストだけのシンプルなものです(余計な絵はありません)
- ボタンはcanvasの特定の領域に描かれています
- ボタンはクリックイベントを持ちます。



---
そのうち、bitbucket上にコードを作る予定です。

私のような開発者は、混雑したGUIに投資するものですが、もしこのGUIがターミナルによってのみ描かれるのでなければ。説明しますと、GUIがいいのはいいことです、販売にはプラスになりますが...リソースを食いつぶさない限りはね。バックエンドの切り替えができるGUIライブラリがあれば理想的です。例えば、リソースをあまり気にしない間は、ターミナルでキャンバスに描画させ(デモ/マーケット)、本格的なものになったらすぐにクイックツールでビットマップに描画させます。OpenGLはもちろんのこと、もっと簡単に描画を処理するcairoもいろいろとあります。

理想的なGUIは、別のアプリケーションで設計し、例えばXMLとしてインポート します。EAにボタンやダイアログフォームの位置を記述するのは、あまり良いアイデアではありません。
 
例、模式図。

レイアウト
<sample>
   <window
     name='Sample'
     caption='Sample'
     x=0
     y=0
     width=320
     height=240
     OnClose='CloseApp'>

     <button caption='Exit' x y width height OnClick='ButtonExitClick'/>    

   </window>

</sample>
イベントの実施。
class SampleCloseAction : public CloseAction
  {
public:
               SampleCloseAction() { SetActionName("CloseApp"); }
   virtual int Execute() { Print('Bye'); return(0); }
  };

class ButtonExitAction : public ButtonClickAction
  {
public:
               ButtonExitAction() { SetActionName("ButtonExitClick"); }
   virtual int Execute() { GUI::WindowClose('Sample'); return(0); }
  };

BaseAction *actions[];

actions[0]=new SampleCloseAction;
actions[1]=new ButtonExitAction;

GUI::WindowCreate('Sample',actions);
 
Maxim Kuznetsov:

一般的には、例えばGUIを別のアプリケーションでデザインし、XMLとして取り込むというのが理想的でしょう。ボタンやダイアログフォームのレイアウトをExpert Advisorに書き込むのは得策ではありません。

其処で)

ということで、エレメントを作成した後に行う、最初の作業に入ります。

 
Maxim Kuznetsov:
一般的には、例えばGUIを別のアプリケーションでデザインし、XMLとして取り込むというのが理想的でしょう。EAでボタンレイアウトやダイアログフォームを書くのは得策ではありません。
この場合、まず、高速で優れたXMLパーサーを書く必要があります。家にあると便利なものです。私自身、CodeBaseのあるバージョンを使っていますが、いくつかの作業、特に新しいビルドには遅すぎです。もう、これだけのパッチや松葉杖が入っているんですから。一般的には、良いパーサーを書くことです。誰でも簡単にできるようにする。
 
Vasiliy Sokolov:
その場合、まず高速で優れたXMLパーサーを書くことから始めなければなりません。家の中にあるとかなり便利なものです。私自身、CodeBaseのあるバージョンを使っていますが、特に新しいビルドでは、いくつかのタスクで本当に遅いんです。もう、これだけのパッチや松葉杖が入っているんですから。一般的には、良いパーサーを書くことです。誰でも簡単にできるようにする。
もしかして、完全に動作し、完全に描画されたスライダーを作る方法を知っているのでしょうか?少なくとも一般論としては...。大まかなコンセプトは把握したい。
 
Реter Konow:
スライダーを作る方法を知っていますか?少なくとも一般論としては...。大まかなコンセプトを学びたい。
残念ながら、できないんです。通常のプリミティブをベースに作っても、かなり複雑な要素になります。
 
Реter Konow:
もしかして、完全に動作し、完全に描画されたスライダーを作る方法を知っているのでしょうか?少なくとも一般論としては...大まかなコンセプトを学びたい。

すべての描画プリミティブが利用可能です。

次に、BitBltのようにBMPを読み込んで、キャンバス上でシャッフルすることができます。