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

 
Nikolai Semko:
GButtonクラスのサンプルをもう少しで完成させるところですが、逃げなければなりません。明日には完成させて発表します。
素晴らしい。とても興味深いです。)
 
Реter Konow:
素晴らしい。とても興味深いです。)


これが、あなたが手にするものです。


ボタンはバックグラウンドまたはフォアグラウンドに表示でき、ラッチ機能の有無も選択できます。

サンプルファイルCanvasButton.mq5では、マウスでボタンをドラッグすることが可能です。Ctrlキーで青いボタン、Shiftキーで赤いボタンを移動させるだけです。

GButton クラスはCCanvas クラスの 子孫なので、CircleWu のサンプルで CCanvas クラスの関数を使用する機能をデモしています(OnInit で実装されています)。そこで、CCanvas クラスの関数を使って、ボタンにテキストを書き込むことが可能です。

もちろん、このクラスはクリーンさを装っているわけではありません。グラフィックの完成度は高くなく、3Dもありきたりで、シャドウも実装されておらず、実行速度も最適化されていない。そして、ほとんどの場合、粗が多く、様々なチェックが不足しています。だから、厳しく判断してはいけない。

もう少し時間をかければ、もちろん可能です。


私はただ...方向性を定めるためと言えるでしょう。


Canvas.mqhは、配列m_pixelsがpublicに定義されている点のみ、オリジナルと異なります。

ファイル:
GButton.mqh  20 kb
Canvas.mqh  152 kb
 
Nikolai Semko:


以下は、その内容です。


ボタンはバックグラウンドまたはフォアグラウンドに表示され、クリックまたは非ロックにすることができます。

サンプルファイルCanvasButton.mq5では、マウスでボタンをドラッグすることが可能です。Ctrlキーで青いボタン、Shiftキーで赤いボタンを移動させるだけです。

GButton クラスは CCanvas クラスの子孫なので、CircleWu のサンプルで CCanvas クラスの関数を使用する機能をデモしています(OnInit で実装されています)。そこで、CCanvas クラスの関数を使って、ボタンにテキストを書き込むことが可能です。

もちろん、このクラスはクリーンさを装っているわけではありません。グラフィックの完成度は高くなく、3Dもありきたりで、シャドウも実装されておらず、実行速度も最適化されていない。そして、ほとんどの場合、粗が多く、様々なチェックが不足しています。ですから、あまり厳しく判断しないでください。

もう少し時間をかければ、もちろん可能です。


私はただ...方向性を決めるということですね。


Canvas.mqhは、配列m_pixelsがpublicに定義されている点のみ、オリジナルと異なります。

ニコライ 私見ですが、かなりいい感じに仕上がりました。良いスタートを切ることができたので、さらに上を目指すことができます。このようなボタンをキーと呼びたい。上、左の光と右、下 - 押された状態のために暗い、またはその逆、それはさらに良くなります(唯一の明るい背景を追加する必要があり、そうでなければ黒背景のチャート上の暗い線が表示されません):あなたは4明確なフレームの行を持っている場合。そして、テキストとピクチャを設定することができます。

とにかく、ナイストライです。)

 
Реter Konow:

.フレームの4本の明確な線を、上、左が明るい線、右、下が暗い線で押された状態、その逆が押された状態、と分割すると、さらに良くなります(ただ、明るい背景を追加しないと、黒いグラフに対して暗い線が見えなくなってしまいます)。

そうですね、どんな描き方をしてもいいということははっきりしています。この場合、名作を目指したわけではありません。しかし、まず改善したいのは、ボタン画像のすべての配列(この場合は2つの配列)を生成し、ArrayCopyだけで コピーすることで、毎回画像を作成する必要がないことです。これで作業は大幅に軽減されますが、その代償としてRAMの追加消費が発生します。しかし、現在ではRAM16GBのコンピュータが当たり前になっており、さらにボタンの数が多ければ、特に同じボタンが同じ配列を使うことになるので、追加メモリの消費量が1~2MBを超えることはまずないでしょう。だから、問題ないと思うんです。メインはスピードです。
 
Nikolai Semko:
そう、好きなように描けばいいということが明確なのです。この場合、名作を目指すという目標は立てませんでした。しかし、まず改善したいのは、ボタン画像のすべての配列(この場合は2つの配列)を生成し、ArrayCopyだけでコピーすることで、毎回画像を作成する必要がないことです。これで作業は大幅に軽減されますが、その代償としてRAMの追加消費が発生します。しかし、現在では16GBのRAMを搭載したコンピュータが当たり前になっており、さらにボタンの数が多ければ、特に同じボタンが同じアレイを使うことになるので、追加メモリ消費量が1~2MBを超えることはまずないでしょう。だから、問題ないと思うんです。メインはスピードです。

なるほど、ボタンについて質問したとき、キャンバスでこんなことができないか、と思ったんです。


プレスされた。

プレスされた。

この例では、フレームの各辺が数本の線で構成されています。フレームの左右に合計4本のグラデーションラインがあります。各線は、ボタンの 状態と与えられたフレームの形状に依存する異なる色合いを持つ。CCanvas に、枠の特定のグラデーション線に色を設定する機能があれば、上の例のように簡単に作ることができます。それこそが、私が知りたかったことなのです。

 
Реter Konow:

なるほど、ボタンについて質問したとき、キャンバスでこんなことができないか、と思ったんです。


プレスされた。

プレスされた。

この例では、フレームの各辺が数本の線で構成されています。フレームの左右に合計4本のグラデーションラインがあります。それぞれの線は、ボタンの状態 や与えられた枠の形状によって異なる色合いを持ちます。CCanvas に、枠の特定のグラデーション線に色を設定する機能があれば、上の例のように簡単に作ることができます。それこそが、私が知りたかったことなのです。

私はあなたを理解していない、ピーター。あなたは肉の話をしていて、私は骨格の話をしているんです。骨があれば、肉を育てることができる。私の例では、Pressed, Pressedという状態になっていないのでしょうか?GButtonクラスの中を見たことがありますか?ピーターさん、私からのアドバイスは、すべてを捨てて、緊急にOOPを勉強することです。あなたのプロジェクトでは、コードの肥大化と呼ばれる天井に突き当たったところです。それはOOPによって簡単に克服される。
また、CCanvasでは、ハードウェアにアクセスする必要がないため、MT5ウィンドウの中にWindowsを書き込むことも可能です。

 
Nikolai Semko:
私はあなたを理解していない、ピーター。あなたは肉の話をしていて、私は骨格の話をしているんです。骨があれば、肉がつくれる。私の例では、Pressed, Pressedという状態になっていないのでしょうか?GButtonクラスの中を見たことがありますか?ピーターさん、私からのアドバイスは、すべてを捨てて、緊急にOOPを勉強することです。これはコードの肥大化と呼ばれるものですが、OOPの力を借りれば簡単に克服できます。
また、Canvasではあらゆることが可能で、WindowsもMT5のウィンドウ内に書き込むことができます。

)))では、なぜこの話題を始めたのか。) これからOOPを勉強します。

この例では、ボタン、クリックイベント、それらのボタンの状態があります。すべてOKです。しかし、ニコライ、私はまだ私が尋ねたことを理解していない - CCcanvasクラスで、フレームのグラデーションラインに特定の色を設定するオプションがありますか?あなたの例を見ると、あるように思うかもしれませんが...。その場合、私の例と似たようなものを描けるでしょうか?私はこのクラスの機能を使って、このような描画のしやすさや可能性に興味があるのですが、スピードとクラスの機能の改善についてお話しいただいています。それは少し違うテーマですね。

 
Реter Konow:

)))では、なぜこの話題を始めたのか。) これからOOPを勉強します。

OOPの学習は、Canvasではなく、もっと簡単なものから始めた方がいいのです。
 
Vasiliy Sokolov:
OOPの学習は、Canvasよりもシンプルなものから始めるのがよいでしょう。
おっしゃるとおりです。まずは教科書から始めた方がいいのかもしれませんね。本当に、OOPというのは複雑ですね。紛らわしい...。
 
Nikolai Semko:
GButtonクラスの中を見たことがありますか?


クラスの中を覗いてみました。見た目はかっこいいのですが、CCanvas クラスの 全体の仕組みがよくわかりません。だから、そこに私の質問の答えがなかったんです。