ライブラリ: EasyAndFastGUIグラフィックインターフェース作成ライブラリ - ページ 22

 

同僚の皆さん、こんにちは!

オブジェクト名を"CElementBase:: " に置き換えることで、ワーニングの数を18個から6個に減らすことができました。

そして、この6つのエラーは4つのタイプに減らすことができました。正しく囲むのを手伝ってください。

1.m_tabs.GetButtonPointer(m_selected_tab). "を "CElementBase:: "に正しく置き換えるには?

//--- 線の色を定義する
   color clr=m_back_color;
   if(m_tabs.GetButtonPointer(m_selected_tab).IsLocked()) // これだ!
      clr=m_tabs.GetButtonPointer(m_selected_tab).BackColorLocked();
//--- 線を引く
   m_canvas.Line(x1,y1,x2,y2,::ColorToARGB(clr,m_alpha));
  }


2.ここで、"el. "を "CElementBase:: "に置き換えると、コンパイルエラーが発生します。- IsAvailable - access to non-staticmember of function" というコンパイルエラーが発生します。

      for(int e=0; e<elements_total; e++)
        {
         //--- 利用可能な項目のみをチェックする
         CElement *el=m_wnd[m_active_window_index].m_elements[e];
         if(!el.IsVisible() || !el.IsAvailable() || el.IsLocked())
            continue;
         //--- アイテムハンドラでのイベント処理
         el.OnEvent(m_id,m_lparam,m_dparam,m_sparam);
        }


3. 同じ行で、"el.IsLocked()" を "CElementBase::IsLocked" に置き換えると、"IsLocked - access to non-static member of function" という エラーが発生します。

4. 最後に、"m_windows[0].IsLocked()" を置き換える正しい方法を教えてください。

//--- インターフェイスが作成されなかった場合は終了する。
   if(windows_total<1)
      return;
//--- いずれかのモードが有効な場合、ロックされたフォームのすべての要素のサイズを変更する。
   if(m_windows[0].IsLocked() && (m_windows[0].AutoXResizeMode() || m_windows[0].AutoXResizeMode()))
     {

このライブラリを使用するのは素晴らしいことですが、まずこれらの問題を解決する必要があります。


よろしくお願いします!

Documentation on MQL5: Language Basics / Object-Oriented Programming / Static Members of a Class
Documentation on MQL5: Language Basics / Object-Oriented Programming / Static Members of a Class
  • www.mql5.com
Static Members of a Class - Object-Oriented Programming - Language Basics - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 
Yevgen Drumachyk:

やあ、同僚たち!

オブジェクト名を"CElementBase:: " に置き換えることで、ワーニングの数を18から6に減らすことができました。

el.CElementBase::IsLocked() ?
 
Edgar Akhmadeev:
el.CElementBase::IsLocked() ?

Edgar Akhmadeev、どうもありがとう!

うまくいきました!))

 

同僚の皆さん、こんにちは!

このライブラリを使用して2つのウィンドウを作成する方法を教えてください。私は2つのウィンドウで構成されるExpert Advisorを書いています。

最初の取引パネルのウィンドウは作成済みで、問題なく動作しています:

CWindow m_window;

CreateWindow(m_window, "META TOOLS",1,1,175,175,200,false,false,true,true) + ボタンを追加:


しかし

CWindow m_watchlist_window;

CreateWindow(m_watchlist_window, "ウォッチリスト",150,1,100,150,150,false,false,true,true,false)

CreateButton(m_watchlist1_btn, "EURUSD",m_watchlist_window,0,245,25,60,30)

すると、EURUSDボタンが空中に現れる。つまり、別のウィンドウは作成されない。なぜですか?



このUIは次のコンテキストで作成される: class CProgram : public CWndCreate

次のコマンドでUIの作成を完了する。

CWndEvents::CompletedGUI()


マルチウィンドウUIを作成できたかどうか教えてください。

2つの独立したウィンドウについて話しています。つまり、(設定のような)ダイアログウィンドウが 現れるようなものは適していません。両方のウィンドウが常に表示され、独立してクリックできる必要があります。なぜ別々のウィンドウなのですか?最初のウィンドウ(トレードパネル)は固定サイズだからです。二つ目のウォッチ・リストは、追加されるアイテムの数によってウィンドウの大きさが変わります。

 

こんにちは!

このライブラリを使って複数の独立したウィンドウを作成できましたか?つまり、WindowCreate()メソッドを複数回呼び出して、同じEA内のチャート上にウィンドウを追加することができますか?

私は1つのウィンドウを正常に作成することができます。しかし、2つ目のウィンドウを作成しようとすると表示されません。

なぜでしょうか?

あるいは、どのようにして追加のウィンドウ(ダイアログではない)を作成したのか、例を教えてください。

ありがとうございます!

 
Yevgen Drumachyk:

このライブラリを使って2つのウィンドウを作る方法を教えてください。


できません。すべては1つのメイン・ウィンドウを中心に構築されている。私が自分のライブラリを書き始めた理由のひとつです。)

 
Oleksii Chepurnyi:

とんでもない。すべては1つのメインウィンドウを中心に構築されている。私が自分のライブラリを書き始めた理由の1つです )

ありがとう、Oleksii Chepurnyi!結局、このライブラリなしでやっていきたい。とてもよくできている。


他のバージョンは?もしかしたら、誰かがこの問題を回避して、1つ以上のウィンドウを作ることに成功したのかも?

ライブラリのコードを見ればわかるが、新しく作成されたウィンドウは「要素の共通配列」に追加される。ということは、ウィンドウは1つだけではない......?ライブラリのこのコードに注目してください:



//+------------------------------------------------------------------+
//| インターフェイス要素データベースにウィンドウ・ポインタを追加する。
//+------------------------------------------------------------------+
void CWndContainer::AddWindow(CWindow &object)
  {
   int windows_total=::ArraySize(m_windows);
//--- ウィンドウがまだない場合は、要素カウンターをゼロにリセットする。
   if(windows_total<1)
     {
      m_counter_element_id=0;
      ::Comment("Loading. Please wait...");
     }
//--- windows配列へのポインタを追加する。
   int new_size=windows_total+1;
   ::ArrayResize(m_wnd,new_size);
   ::ArrayResize(m_windows,new_size);
   m_windows[windows_total]=::GetPointer(object);
//--- 要素の共通配列へのポインタを追加する。
   int last_index=ResizeArray(m_wnd[windows_total].m_elements);
   m_wnd[windows_total].m_elements[last_index]=::GetPointer(object);
//--- ウィンドウ・ボタンのポインタをデータベースに追加する。
   AddWindowElements(windows_total,object);
//--- idを設定し、最後の要素のidを記憶する。
   m_windows[windows_total].Id(m_counter_element_id);
   m_windows[windows_total].LastId(m_counter_element_id);
//--- 要素識別子のカウンターを増やす
   m_counter_element_id++;
  }
 
2つのウィンドウを同時に起動してアクティブにするには、ライブラリを編集する必要がある。単純で膨大な作業ではない。もしそれが必要なら、フリーランスに連絡してほしい。
 
これまでで最高だ。おめでとう。
 

CreateSimpleButtonに制限はありますか?ウィンドウに6つ以上のシンプルボタンを置くことができません。グラフィカルインターフェイス x(mql4)のコードを使用しています。Anatoli Kazharski Best, RDTに感謝しています。


メタトレーダー4自体にエラーがあることがわかりました。変更を加えてグラフを閉じ、新しいグラフを開いてEAを入れると、変更が正しく適用されることに気づきました。Anatoliさん、非常に優れた完全な仕事をありがとうございました。最高、RDT

Anatoli Kazharski
Anatoli Kazharski
  • 2019.02.17
  • www.mql5.com
Perfil do Trader