Nikolai Semko: そう、好きなように描けばいいということが明確なのです。この場合、名作を目指すという目標は立てませんでした。しかし、まず改善したいのは、ボタン画像のすべての配列(この場合は2つの配列)を生成し、ArrayCopyだけでコピーすることで、毎回画像を作成する必要がないことです。これで作業は大幅に軽減されますが、その代償としてRAMの追加消費が発生します。しかし、現在では16GBのRAMを搭載したコンピュータが当たり前になっており、さらにボタンの数が多ければ、特に同じボタンが同じアレイを使うことになるので、追加メモリ消費量が1~2MBを超えることはまずないでしょう。だから、問題ないと思うんです。メインはスピードです。
Nikolai Semko: 私はあなたを理解していない、ピーター。あなたは肉の話をしていて、私は骨格の話をしているんです。骨があれば、肉がつくれる。私の例では、Pressed, Pressedという状態になっていないのでしょうか?GButtonクラスの中を見たことがありますか?ピーターさん、私からのアドバイスは、すべてを捨てて、緊急にOOPを勉強することです。これはコードの肥大化と呼ばれるものですが、OOPの力を借りれば簡単に克服できます。
GButtonクラスのサンプルをもう少しで完成させるところですが、逃げなければなりません。明日には完成させて発表します。
素晴らしい。とても興味深いです。)
これが、あなたが手にするものです。
ボタンはバックグラウンドまたはフォアグラウンドに表示でき、ラッチ機能の有無も選択できます。
サンプルファイルCanvasButton.mq5では、マウスでボタンをドラッグすることが可能です。Ctrlキーで青いボタン、Shiftキーで赤いボタンを移動させるだけです。
GButton クラスはCCanvas クラスの 子孫なので、CircleWu のサンプルで CCanvas クラスの関数を使用する機能をデモしています(OnInit で実装されています)。そこで、CCanvas クラスの関数を使って、ボタンにテキストを書き込むことが可能です。
もちろん、このクラスはクリーンさを装っているわけではありません。グラフィックの完成度は高くなく、3Dもありきたりで、シャドウも実装されておらず、実行速度も最適化されていない。そして、ほとんどの場合、粗が多く、様々なチェックが不足しています。だから、厳しく判断してはいけない。
もう少し時間をかければ、もちろん可能です。
![](https://c.mql5.com/3/128/push.png)
私はただ...方向性を定めるためと言えるでしょう。
Canvas.mqhは、配列m_pixelsがpublicに定義されている点のみ、オリジナルと異なります。
以下は、その内容です。
ボタンはバックグラウンドまたはフォアグラウンドに表示され、クリックまたは非ロックにすることができます。
サンプルファイルCanvasButton.mq5では、マウスでボタンをドラッグすることが可能です。Ctrlキーで青いボタン、Shiftキーで赤いボタンを移動させるだけです。
GButton クラスは CCanvas クラスの子孫なので、CircleWu のサンプルで CCanvas クラスの関数を使用する機能をデモしています(OnInit で実装されています)。そこで、CCanvas クラスの関数を使って、ボタンにテキストを書き込むことが可能です。
もちろん、このクラスはクリーンさを装っているわけではありません。グラフィックの完成度は高くなく、3Dもありきたりで、シャドウも実装されておらず、実行速度も最適化されていない。そして、ほとんどの場合、粗が多く、様々なチェックが不足しています。ですから、あまり厳しく判断しないでください。
もう少し時間をかければ、もちろん可能です。
私はただ...方向性を決めるということですね。
Canvas.mqhは、配列m_pixelsがpublicに定義されている点のみ、オリジナルと異なります。
ニコライ 私見ですが、かなりいい感じに仕上がりました。良いスタートを切ることができたので、さらに上を目指すことができます。このようなボタンをキーと呼びたい。上、左の光と右、下 - 押された状態のために暗い、またはその逆、それはさらに良くなります(唯一の明るい背景を追加する必要があり、そうでなければ黒背景のチャート上の暗い線が表示されません):あなたは4明確なフレームの行を持っている場合。そして、テキストとピクチャを設定することができます。
とにかく、ナイストライです。)
.フレームの4本の明確な線を、上、左が明るい線、右、下が暗い線で押された状態、その逆が押された状態、と分割すると、さらに良くなります(ただ、明るい背景を追加しないと、黒いグラフに対して暗い線が見えなくなってしまいます)。
そう、好きなように描けばいいということが明確なのです。この場合、名作を目指すという目標は立てませんでした。しかし、まず改善したいのは、ボタン画像のすべての配列(この場合は2つの配列)を生成し、ArrayCopyだけでコピーすることで、毎回画像を作成する必要がないことです。これで作業は大幅に軽減されますが、その代償としてRAMの追加消費が発生します。しかし、現在では16GBのRAMを搭載したコンピュータが当たり前になっており、さらにボタンの数が多ければ、特に同じボタンが同じアレイを使うことになるので、追加メモリ消費量が1~2MBを超えることはまずないでしょう。だから、問題ないと思うんです。メインはスピードです。
なるほど、ボタンについて質問したとき、キャンバスでこんなことができないか、と思ったんです。
プレスされた。
プレスされた。
この例では、フレームの各辺が数本の線で構成されています。フレームの左右に合計4本のグラデーションラインがあります。各線は、ボタンの 状態と与えられたフレームの形状に依存する異なる色合いを持つ。CCanvas に、枠の特定のグラデーション線に色を設定する機能があれば、上の例のように簡単に作ることができます。それこそが、私が知りたかったことなのです。
なるほど、ボタンについて質問したとき、キャンバスでこんなことができないか、と思ったんです。
プレスされた。
プレスされた。
この例では、フレームの各辺が数本の線で構成されています。フレームの左右に合計4本のグラデーションラインがあります。それぞれの線は、ボタンの状態 や与えられた枠の形状によって異なる色合いを持ちます。CCanvas に、枠の特定のグラデーション線に色を設定する機能があれば、上の例のように簡単に作ることができます。それこそが、私が知りたかったことなのです。
私はあなたを理解していない、ピーター。あなたは肉の話をしていて、私は骨格の話をしているんです。骨があれば、肉がつくれる。私の例では、Pressed, Pressedという状態になっていないのでしょうか?GButtonクラスの中を見たことがありますか?ピーターさん、私からのアドバイスは、すべてを捨てて、緊急にOOPを勉強することです。これはコードの肥大化と呼ばれるものですが、OOPの力を借りれば簡単に克服できます。
)))では、なぜこの話題を始めたのか。) これからOOPを勉強します。
この例では、ボタン、クリックイベント、それらのボタンの状態があります。すべてOKです。しかし、ニコライ、私はまだ私が尋ねたことを理解していない - CCcanvasクラスで、フレームのグラデーションラインに特定の色を設定するオプションがありますか?あなたの例を見ると、あるように思うかもしれませんが...。その場合、私の例と似たようなものを描けるでしょうか?私はこのクラスの機能を使って、このような描画のしやすさや可能性に興味があるのですが、スピードとクラスの機能の改善についてお話しいただいています。それは少し違うテーマですね。
)))では、なぜこの話題を始めたのか。) これからOOPを勉強します。
OOPの学習は、Canvasよりもシンプルなものから始めるのがよいでしょう。
GButtonクラスの中を見たことがありますか?