記事"グラフィカルインターフェイスX:マルチラインテキストボックスでのテキスト選択(ビルド13)"についてのディスカッション - ページ 5

 
Pavel Kolchin:
CWndEvents::ResetWindow() メソッドを使って、ディールの矢印がパネルにかからないようにしてください。
 
Anatoli Kazharski:

EAサブウィンドウを削除すると、EAが削除されてしまいます。

img

 
Pavel Kolchin:

EAサブウィンドウを削除するとEAも削除されます。

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

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

//---

グラフィカルインターフェイスが チャートのメインウィンドウにあるExpert Advisorの場合、このパラメータの値はfalseに する必要があります。

 
Anatoli Kazharski:

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


これは明らかで、機能し、機能し、機能し、機能し(数日間)、そして失敗する関数がある。


//+------------------------------------------------------------------+
//| Expert Advisorウィンドウの番号の確認と更新。
//+------------------------------------------------------------------+
void CWndEvents::CheckExpertSubwindowNumber(void)
  {
//--- エキスパートでない場合は終了する。
   if(PROGRAM_TYPE!=PROGRAM_EXPERT)
      return;
//--- グラフ上のサブウィンドウの数を取得する
   int subwindows_total=(int)::ChartGetInteger(m_chart_id,CHART_WINDOWS_TOTAL);
//--- サブウィンドウの数とインジケータの数が変わっていなければ終了する。
   if(subwindows_total==m_subwindows_total)
      return;
//--- サブウィンドウの現在の数を保存する
   m_subwindows_total=subwindows_total;
//--- エキスパート・サブウィンドウがあるかどうかをチェックする。
   bool is_subwindow=false;
//--- エキスパートのサブウィンドウを見つける。
   for(int sw=0; sw<subwindows_total; sw++)
     {
      //--- エキスパート・サブウィンドウがあればループを止める
      if(is_subwindow)
         break;
      //--- このウィンドウ/サブウィンドウにいくつのインジケータがあるか
      int indicators_total=::ChartIndicatorsTotal(m_chart_id,sw);
      //--- ウィンドウ内のすべてのインジケーターを見てみよう。 
      for(int i=0; i<indicators_total; i++)
        {
         //--- インジケーターの短い名前を取得する
         string indicator_name=::ChartIndicatorName(m_chart_id,sw,i);
         //--- これがエキスパート・サブウィンドウでない場合は、次のサブウィンドウに移動する。
         if(indicator_name!=m_subwindow_shortname)
            continue;
         //--- EAサブウィンドウは、以下のとおりである。
         is_subwindow=true;
         //--- サブウィンドウ番号が変更された場合 
         // メイン・フォームのすべての要素に新しい数値を保存する必要がある。
         if(sw!=m_subwin)
           {
            //--- サブウィンドウの番号を保存する
            m_subwin=sw;
            //--- インターフェースのメインフォームのすべての要素にも保存しよう。
            int elements_total=CWndContainer::ElementsTotal(0);
            for(int e=0; e<elements_total; e++)
               m_wnd[0].m_elements[e].SubwindowNumber(m_subwin);
           }
         //---
         break;
        }
     }
//--- Expert Advisor サブウィンドウが見つからない場合は、Expert Advisor を削除する。
   if(!is_subwindow)
     {
      ::Print(__FUNCTION__," > EAサブウィンドウを削除するとEAが削除される! ");
      //--- チャートからExpert Advisorを削除する。
      ::ExpertRemove();
     }
  }
 
Pavel Kolchin:


明らかなように、数日間機能して、その後失敗する機能がある。

ライブラリの最新バージョンを使用していないか、またはライブラリに変更を加えている。このメソッドの最初にこの条件があるはずだ:

//--- (1) EAでないか、(2) EAのGUIがメインウィンドウにある場合は終了する。
   if(PROGRAM_TYPE!=PROGRAM_EXPERT || !EXPERT_IN_SUBWINDOW)
      return;

//---

そして、あなたは持っている:

//--- エキスパートでない場合は終了する。
   if(PROGRAM_TYPE!=PROGRAM_EXPERT)
      return;
 
Anatoli Kazharski:

ライブラリの最新バージョンを使用していないか、編集を加えている。このメソッドの最初に、この条件があるはずです:

はい、その方がいいと思います)

バージョン10.2なので、必要なメニュー項目がすべてあり、mt4もサポートしています。

その後、作業に影響を与えるような重大な変更がありましたか?

 
Pavel Kolchin:

...

それ以降、パフォーマンスに影響を与えるような重要な編集はありましたか?

すぐに言うのは難しい。常に何かが追加され、修正されている。
 

Qtのような "ファクトリー "の原理でオブジェクトを追加するメカニズムをフォームに追加することが望ましい:

- 右

- 左

- 上

- 下

 
Konstantin:

Qtのような "ファクトリー "の原理でオブジェクトを追加するメカニズムをフォームに追加することが望ましい:

- 右

- 左

- 上

- 下

詳しく説明してください。Qtではどうなのかわかりません。

現在、要素はフォームに対して右、左、上、下と相対的に配置することができます。親要素になれるのはフォームだけです。次のバージョンでは、他の要素を親要素に設定できるようになります。これにより、要素の管理と配置がさらに簡単になります。

 
Anatoli Kazharski:

もっと詳しく説明してください。Qtではどうなのかわからない。

現在、要素はフォームに対して右、左、上、下と相対的に配置することができます。親要素になれるのはフォームだけです。次のバージョンでは、他の要素を親要素に設定できるようになります。これにより、要素の管理と配置がさらに簡単になります。


Qtでは、ファクトリー関数があります:

QWidgetAction *createWidget();

というファクトリ関数があり、ウィジェットを作成するためのテストがこのように行われます:

QWidget * widget() {
   static QWidget * inst = new QWidget;
   return inst;
}

QWidgetの一般的な情報はこちらです

これで、要素をフォームに対して相対的に 配置できるようになりました:右、左、上、下

ここでよく理解できないのですが、この要素の位置はボーダーに対して相対的で、フォームの後ろにも内側にも配置できるのでしょうか?

例えば、フォームがあり、フォームの左のボーダーからさらに左に相対的に要素を配置するのでしょうか?