В первой части публикации мы рассмотрели базовые принципы описания раскладки графического интерфейса MQL-программ на языке MQL. Для их реализации потребовалось создать несколько классов, отвечающих непосредственно за инициализацию интерфейсных элементов, их объединение в общую иерархию и настройку свойств. Сейчас мы готовимся перейти к более...
こんにちは!
取引パネルに複数のタブを作成したいのですが、あるボタンを押すとアイテムのセットが 表示され、別のボタンを押すと別のアイテムのセットが表示されます。あるタブの要素を非表示にするために、タブボタンのonClickイベントハンドラにこの要素のHide()プロパティを適用しました。質問 - 隠された要素もユーザーのアクションに反応しないようにするにはどうすればよいでしょうか。ボタンタブのonClickメソッドでElement.Disable()プロパティを有効にしてみましたが、何も起こりません。あるタブをクリックしてプログラム的にオフにし、別のタブをクリックしてプログラム的にオンにするにはどうすればよいでしょうか?
Wnd.mqhファイルのOnMouseEventメソッドの最初の行が抜けています:
詳細は記事(トレーディングにおけるOLAPの応用(その2)- 記事はOLAPに関するものですが、GUIに関するセクションで上記の問題に触れています)に記載されています:
最小化された状態では、"resize "ボタンは隠され、非アクティブになります。問題はCWnd::OnMouseEventメソッドにある。このようなチェックが欠けているのだ:
// if(!IS_ENABLED || !IS_VISIBLE) return false; - この行は存在しない。明らかに、この問題はコントロールのZオーダーを適切に設定することで解決できる。しかし、ここにも欠陥がありました。ライブラリは要素のZ順序を考慮していないのです。特に、CWndContainer::OnMouseEventメソッドを調べると、Z順序によって優先順位を決定しようとせずに、すべての下位要素を逆順にループしているのがわかります。
したがって、ライブラリの別の "パッチ "か、派生クラスの何らかの "トリック "が必要になります。
原則的に、標準コントロール・ライブラリには修正すべき点がたくさんある。MQLプログラムのグラフィカル・インターフェイスをマークアップする手段としてのMQLという 記事で、その全容を知ることができる。パート2(もし興味があれば、パート1と3があります)。
コントロール・ライブラリにパッチを当ててみてください。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' - 宣言されていない識別子 ....
何が間違っているのでしょうか?
OnTickからCLabelに テキストを書き込み/送信するには?
というエラーが発生します。
'm_label' - 宣言されていない識別子 ...
何が間違っているのでしょうか?
ヘルプに あるCreateLabel()関数のように、チャート、座標などへのバインディングを行いましたか?
そして、CreateLabel()でのチャート、座標などへのバインディングは、ヘルプのここに 示されています。
はい
その場でオブジェクトにテキストを書き込めば、すべてうまくいきます。
しかし、OnTickで書き込もうとすると失敗します。
ティックごとにオブジェクトを再作成する必要はないですよね?はい
その場でオブジェクトにテキストを書き込めば、何も問題ない。
しかし、OnTickで書き込もうとすると失敗します。
tickごとにオブジェクトを再作成する必要はないですよね?m_labelを パブリック・ セクションに移動したらどうなりますか?
試してみましたが、同じエラーでした。
ただ、4pcでやっています。
それが問題だと思う。
それに、コンパイルはできるけど、これも動かない。
m_scroll_v1.Disable();(ラジオボタンを切り替えようとしている。)Destroy()はうまくいくが、Disableはやりたがらない。
試みた
ただ、僕は4RKでやっているんだ。
それが問題だと思う。
それにこれはコンパイルしても動かないんだ。
m_scroll_v1.Disable();(ラジオボタンを切り替えようとしている。)Destroy()はうまくいくが、Disableはやりたがらない。
4ではすべてが機能する。そして、定義したオブジェクト。 Panel.m_label.Text("Max.Margin")のように。
このように動作します。
ありがとう!
まず親を追加して、それからpublicに移動したらうまくいきました。
そして、これは m_scroll_v1.Disable(); はまだ動作しません。
次のように動作します。
ありがとう!
最初に親を追加し、次にそれをパブリックに移動させたらうまくいきました。
そしてこのm_scroll_v1.Disable();はまだ動作しません。