記事"任意の複雑さのレベルのグラフィカルなパネルを作成する方法"についてのディスカッション - ページ 8

 
Alexander:

こんにちは!

取引パネルに複数のタブを作成したいのですが、あるボタンを押すとアイテムのセットが 表示され、別のボタンを押すと別のアイテムのセットが表示されます。あるタブの要素を非表示にするために、タブボタンのonClickイベントハンドラにこの要素のHide()プロパティを適用しました。質問 - 隠された要素もユーザーのアクションに反応しないようにするにはどうすればよいでしょうか。ボタンタブのonClickメソッドでElement.Disable()プロパティを有効にしてみましたが、何も起こりません。あるタブをクリックしてプログラム的にオフにし、別のタブをクリックしてプログラム的にオンにするにはどうすればよいでしょうか?

Wnd.mqhファイルのOnMouseEventメソッドの最初の行が抜けています:

if(!IS_ENABLED || !IS_VISIBLE) return false;

詳細は記事(トレーディングにおけるOLAPの応用(その2)- 記事はOLAPに関するものですが、GUIに関するセクションで上記の問題に触れています)に記載されています:

最小化された状態では、"resize "ボタンは隠され、非アクティブになります。問題はCWnd::OnMouseEventメソッドにある。このようなチェックが欠けているのだ:

  // if(!IS_ENABLED || !IS_VISIBLE) return false; - この行は存在しない。

明らかに、この問題はコントロールのZオーダーを適切に設定することで解決できるしかし、ここにも欠陥がありました。ライブラリは要素のZ順序を考慮していないのです。特に、CWndContainer::OnMouseEventメソッドを調べると、Z順序によって優先順位を決定しようとせずに、すべての下位要素を逆順にループしているのがわかります。

したがって、ライブラリの別の "パッチ "か、派生クラスの何らかの "トリック "が必要になります。

原則的に、標準コントロール・ライブラリには修正すべき点がたくさんある。MQLプログラムのグラフィカル・インターフェイスをマークアップする手段としてのMQLという 記事で、その全容を知ることができる。パート2(もし興味があれば、パート1と3があります)。

Язык MQL как средство разметки графического интерфейса MQL-программ. Часть 2
Язык MQL как средство разметки графического интерфейса MQL-программ. Часть 2
  • www.mql5.com
В первой части публикации мы рассмотрели базовые принципы описания раскладки графического интерфейса MQL-программ на языке MQL. Для их реализации потребовалось создать несколько классов, отвечающих непосредственно за инициализацию интерфейсных элементов, их объединение в общую иерархию и настройку свойств. Сейчас мы готовимся перейти к более...
 
Stanislav Korotky:

コントロール・ライブラリにパッチを当ててみてください。Wnd.mqhファイルのOnMouseEventメソッドの最初の行が欠けています:

詳細は記事(トレーディングにおけるOLAPの応用(その2)- 記事はOLAPに関するものだが、GUIに関するセクションがあり、そこで上記の問題に触れている)に記載されている:

基本的に、標準のコントロール・ライブラリには微調整が必要なものがたくさんあります。MQLプログラムのGUIをマークアップする手段としてのMQLという 記事で、その全容を知ることができます。パート2(もし興味があれば、パート1と3があります)。

ありがとうございます。

 

OnTickからCLabelに テキストを書き込み/送信するには?

class CControlsDialog : public CAppDialog
{
private:
CLabel m_label;// CLabelオブジェクト

.....

void OnTick()
{.

m_label.Text(DoubleToString(Ask,4));

....

エラーが発生する

'm_label' - 宣言されていない識別子 ....

何が間違っているのでしょうか?

Документация по MQL5: Стандартная библиотека / Панели и диалоги / CLabel
Документация по MQL5: Стандартная библиотека / Панели и диалоги / CLabel
  • www.mql5.com
//|                                                ControlsLabel.mq5 | //|                        Copyright 2017, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| defines                                                          |  INDENT_LEFT                         (11)      ...
 
Renat Akhtyamov:

OnTickからCLabelに テキストを書き込み/送信するには?


というエラーが発生します。

'm_label' - 宣言されていない識別子 ...

何が間違っているのでしょうか?

ヘルプに あるCreateLabel()関数のように、チャート、座標などへのバインディングを行いましたか?

 
Vasiliy Pushkaryov:

そして、CreateLabel()でのチャート、座標などへのバインディングは、ヘルプのここに 示されています。

はい

その場でオブジェクトにテキストを書き込めば、すべてうまくいきます。

しかし、OnTickで書き込もうとすると失敗します。

ティックごとにオブジェクトを再作成する必要はないですよね?
 
Renat Akhtyamov:

はい

その場でオブジェクトにテキストを書き込めば、何も問題ない。

しかし、OnTickで書き込もうとすると失敗します。

tickごとにオブジェクトを再作成する必要はないですよね?
m_labelを public セクションに移動したらどうなる?
 
Vasiliy Pushkaryov:
m_labelを パブリック・ セクションに移動したらどうなりますか?

試してみましたが、同じエラーでした。

ただ、4pcでやっています。

それが問題だと思う。

それに、コンパイルはできるけど、これも動かない。

m_scroll_v1.Disable();(ラジオボタンを切り替えようとしている。)Destroy()はうまくいくが、Disableはやりたがらない。

 
Renat Akhtyamov:

試みた

ただ、僕は4RKでやっているんだ。

それが問題だと思う。

それにこれはコンパイルしても動かないんだ。

m_scroll_v1.Disable();(ラジオボタンを切り替えようとしている。)Destroy()はうまくいくが、Disableはやりたがらない。

4.Destroy()は動作するが、Disableは実行しようとしない。そして、あなたが定義したオブジェクト。 Panel.m_label.Text("Max.Margin")のように。
 
Vasiliy Pushkaryov:
4ではすべてが機能する。そして、定義したオブジェクト。 Panel.m_label.Text("Max.Margin")のように。

このように動作します。

ありがとう!

まず親を追加して、それからpublicに移動したらうまくいきました。

そして、これは m_scroll_v1.Disable(); はまだ動作しません。

 
Renat Akhtyamov:

次のように動作します。

ありがとう!

最初に親を追加し、次にそれをパブリックに移動させたらうまくいきました。

そしてこのm_scroll_v1.Disable();はまだ動作しません。

まだ遭遇していません。わからない。Stanislavがこのスレッドの27番目の投稿で質問に答えていますが、標準ライブラリの Disableもそこで触れられています。