記事"グラフィカルインタフェースX: テキストエディットボックス、ピクチャスライダー、及びシンプルなコントロール(ビルド5)"についてのディスカッション - ページ 4

 
Artyom Trishkin:
なぜテキスト入力フィールドの 空文字列は「"」ではなく「"」なのか? 長い間、なぜ空文字列のチェックが機能しないのかわかりませんでした...。

理由はわかりません。空文字列("")で初期化されます。CTextEdit クラスのコンストラクタを見ればわかる

//+------------------------------------------------------------------+
//| コンストラクタ|
//+------------------------------------------------------------------+
CTextEdit::CTextEdit(void) : m_edit_value(""),
                             m_reset_mode(false),
                             m_show_text_pointer_mode(false),
                             m_align_mode(ALIGN_LEFT),
                             m_text_edit_state(true),
                             m_area_color(clrNONE),
                             m_icon_x_gap(0),
                             m_icon_y_gap(3),
                             m_icon_file_on(""),
                             m_icon_file_off(""),
                             m_label_text(""),
                             m_label_x_gap(0),
                             m_label_y_gap(4),
                             m_label_color(clrBlack),
                             m_label_color_hover(C'85,170,255'),
                             m_label_color_locked(clrSilver),
                             m_edit_y_size(20),
                             m_edit_x_gap(50),
                             m_edit_y_gap(0),
                             m_edit_color(clrWhite),
                             m_edit_color_locked(clrWhiteSmoke),
                             m_edit_text_color(clrBlack),
                             m_edit_text_color_locked(clrSilver),
                             m_edit_text_color_highlight(clrRed),
                             m_edit_border_color(clrSilver),
                             m_edit_border_color_hover(C'85,170,255'),
                             m_edit_border_color_locked(clrSilver)

  {
//--- エレメント・クラスの名前をベース・クラスに保存する。
   CElementBase::ClassName(CLASS_NAME);
//--- マウスの左ボタン押下の優先順位を設定する。
   m_area_zorder  =1;
   m_label_zorder =0;
   m_edit_zorder  =2;
  }
 
Anatoli Kazharski:

なぜかはわからない。これは空文字列("")で初期化されます。CTextEdit クラスのコンストラクタを見れば わかります:

...

そうです。そのため、初期化後に""をチェックするという条件がなぜ機能しないのか理解できなかった。 それから、入力フィールドの 中にカーソルを置くと、そこにスペースと同じ大きさの広いスペースができることに気づきました。私は" "をチェックし、すべてが機能しました。
 
Pavel Kolchin:

接続時にこのようなエラーが出ます(作業には支障ありません)。

cannot load custom indicator 'C:\MetaTrader\MT5 demo\MQL5\Experts\new_menue_fc_1.00.ex5::Indicators\SubWindow.ex5' [4802]

CWndEvents::DetermineSubwindow > Ошибка при получении хэндла индикатора в директории ::Indicators\SubWindow.ex5 !

私はこのバージョンのライブラリを使用しており、メニューはメイングラフィックにあります。

メニューはメイングラフィックの中にあります。
 
Pavel Kolchin:
ファイルのどこにつながっているのかがわかりません。

テストしているMQLアプリケーションのメインファイルで、以下の行を 削除してください:

//+------------------------------------------------------------------+
//|TestLibrary05.mq5
//| Copyright 2016, MetaQuotes Software Corp.
//|http://mql5.commql5.com
//+------------------------------------------------------------------+
#property copyright "2016, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//--- 「エキスパート・イン・サブウィンドウ」モードのインジケータの接続
#resource "\\Indicators\\SubWindow.ex5"
 
Anatoli Kazharski:

テストしているMQLアプリケーションのメインファイルで、この行を 削除してください:

#resource "\\Indicators\\SubWindow.ex5"
この行を削除してください。
 
Pavel Kolchin:
それが問題です。

Defines.mqh ファイルのEXPERT_IN_SUBWINDOW パラメータをfalseに 設定する:

//+------------------------------------------------------------------+
//|定義する。mqh
//| Copyright 2015, MetaQuotes Software Corp.
//|http://mql5.commql5.com
//+------------------------------------------------------------------+
//--- ウィンドウモードのエキスパート
#define EXPERT_IN_SUBWINDOW false
 
Anatoli Kazharski:

Defines.mqh ファイルで、EXPERT_IN_SUBWINDOW パラメータをfalseに 設定する:

 
Pavel Kolchin:
それは素晴らしいことだ!)
 
Defines.mqhの "expert in sub window "モードがデフォルトのtrueに変更されていますが、何か理由があるのでしょうか?
//--- サブウィンドウのエキスパート」モード
#define EXPERT_IN_SUBWINDOW true

このため、エキスパートがサブウインドウで使用されていないとエラーになります。
Defines.mqhでfalseに変更したところ、今まではすべて正常に動作していたようです。

 
親愛なるアナトーリさん、おめでとうございます!あなたのインターフェースはとても便利で簡単で素晴らしいです。私のEAとインジケータに採用しました。本当にありがとうございます。もっともっと続けてください!