MQL5におけるOOPに関する質問 - ページ 15

 
Vasiliy Pushkaryov:

誤報をお詫びします。先ほど、子クラスでCreate()メソッドを呼び出すことはできないと書きました。

今、再確認したところ、できます。しかし、プライベートメンバーm_buttonへのアクセスは不可能でした。つまり、例えばボタンの状態(押された/離された)を確認することは不可能でした。

イゴールさんのヒントで可能になりました。

そこにボタンの問題はありません、私は覚えていないが、このクラスは準備ができていたメソッド(フィールドではない) - 状態を決定するために、そうでなければ、IsActive() または PropFlags() または StateFlags() - ボタンで今何が起こっているかを調べるために確実に何かが用意されていました。

MQLのグラフィックスを使ったハックの2つ目を紹介します。ボタンの名前(Name())で検索し、ObjectGetInteger()などの関数で状態を取得することができますが、雑にやらないために、クラス内にObjectGetInteger()でプロパティ取得するメソッドを記述しておきましょう。


然うして;)

マウスがオブジェクトをクリックしたように、パネルを最小化および最大化した後にチェックボックスが選択される理由が分かりませんでした。

 
Igor Makanu:

は、バトンの問題はありませんが、私は覚えていないが、このクラスは、準備ができていたメソッド(フィールドではない) - 状態を決定するために、そうでない場合は、チェックISActive()またはPropFlags()またはStateFlags() - まさにそこに準備ができていたボタンで何が今ある見つけることです。

MQLのグラフィックスを使ったハックの2つ目を紹介します。ボタンの名前(Name())で検索し、ObjectGetInteger()などの関数で状態を取得することができますが、雑にやらないために、クラス内にObjectGetInteger()でプロパティ取得するメソッドを記述してください。

然うして;)

PS: 私もSBと格闘しました。パネルを最小化、最大化した後にチェックボックスが選択される理由が見つからず、まるでマウスがオブジェクトをクリックしたかのようでした...全体を読み直したくないと思い、独自のハンドラを作成しました。

私もこの問題に遭遇しました。ダイアログボックスを自分色に染める必要がありました。また、プライベートセクションに隠されていることも判明した。ObjectGetInteger() を利用してパネルを直接描画する方法を用いて何とか解決しました。そして、最小化して展開した後もぐちゃぐちゃでした。

最初に最小化する前のヘッダーはこのような感じです。


そして、この後のように。


また、閉じるボタンと折りたたみボタンでデフォルトの色が返される理由もわかりませんでした。

 
Vasiliy Pushkaryov:

私もこれに遭遇したことがあります。SBからダイアログボックスを独自の色で着色する必要がありました。プライベートコーナーにも隠されていることが判明した。 ObjectGetInteger()を使って直接パネルを塗る方法を使い、なんとか解決しました。そして、最小化して展開した後もぐちゃぐちゃでした。

最初に最小化する前のヘッダーはこのような感じです。


そして、この後のように。


また、閉じるボタンと折りたたみボタンでデフォルトの色が返される理由もわかりませんでした。

ローカルのstdをもう一度見て、自分のライブラリを書くという決断を確信しました)))
 
Vladimir Simakov:
改めてローカルstdを見て、自分のライブラリを書くことの正しい判断を確信しました)))

ボタンの瞬間については、ここに 書きましたので、そこから抜粋します。

1秒に1回程度、ゆっくりとボタンを押せば、問題なく動作します。少し速く押し始めると、しばしばイベントが阻止されなくなる。

あなたの図書館では、そのような問題に気づきましたか?SBの実装なのか、イベントハンドリングのアーキテクチャなのか知りたいんだけど、どうにもならないの?

 
Vasiliy Pushkaryov:

...知りたいのは、これがSBの実装なのか、それともイベント処理のアーキテクチャで、どうしようもないのか、ということです。

ライブラリを使用 せず、グラフィカルなオブジェクトとして自分でボタンを作成し、ライブラリで作成したボタンと動作を比較することができます。

 
Dmitry Fedoseev:

ライブラリを使わずに、自分でグラフィカルなオブジェクトとしてボタンを作成し、ライブラリを使って作成したボタンと動作を比較することができます。

アイデアありがとうございます、試してみます。
 
Vasiliy Pushkaryov:

ボタンがついた瞬間をここに 書きましたので、抜粋してご紹介します。

あなたの図書館では、そのような問題に気づきましたか?SBの実装が原因なのか、イベント処理のアーキテクチャが原因なのか知りたいんだけど、どうにかならないの?

自分用に書くのであれば(Marketでなく)、C#でボタン付きのウィンドウを作って、MQL .dllからC#で呼び出す方が簡単です。ボタン、アイコン、チェックボックスなどを使ったどんなファンタジーも30分~1時間でC#で実現できますが、私は1週間資料をググってました。

指標フォルダにあるバーを見て、それをベースにすればいいだけです。自分でインターフェースを作る方がはるかに速いのですが、これも私の経験で、そのように理解しています

SZS: 今思い出したのですが、コードベースにシンプルなパネルを置きました。そこにはボタンはありませんが、テキストラベルがあり、コードは可能な限りシンプルです。https://www.mql5.com/ru/code/25897

 
Dmitry Fedoseev:

ライブラリを使わずに、自分でグラフィカルなオブジェクトとしてボタンを作成し、ライブラリで作成したボタンと性能を比較することができます。

そうそう、昔の仕事で、SBの仕事がないときに、クローズボタンみたいなのを作ったんですよ。すぐに使える。


問題はSBの実装にあることがわかった。

 
Vasiliy Pushkaryov:

そうそう、昔の仕事でSBの仕事をしていない時に、クローズボタンみたいなのをやっていたのをパクったんです。すぐに使える。


SBの実装に問題があることが判明した。

標準ライブラリは、コントロールがフォーム上に作成されることを意味しています。まったく動かないはずなんです、そんなの。少なくとも、昔はそうだった。

 
Igor Makanu:

自分用に書くのであれば(Marketでなく)、C#でボタン付きのウィンドウを作って、MQL .dllからC#で呼び出す方が簡単です。ボタン、アイコン、チェックボックスなどを使ったどんなファンタジーもC#で30分~1時間で実現できますが、私は1週間ほど資料をググってました。

指標フォルダにあるバーを見て、それをベースにすればいいだけです。自分でインターフェースを作る方がはるかに速いのですが、これも私の経験で、そのように理解しています

ZS: そういえば、codebaseにシンプルなパネルを置きました。そこにはボタンはありませんが、テキストラベルがあり、コードはできるだけシンプルにしました。https://www.mql5.com/ru/code/25897

いや、C#は知らない。

パネルを見てみます、ありがとうございました。