記事"グラフィカルインタフェースX: Easy And Fast (簡単で手早い)ライブラリの更新(ビルド2)"についてのディスカッション - ページ 3

 
Alexey Oreshkin:
いつアップデートが必要ですか?

緊急にアップデートが必要な場合は、ご自身で以下の変更を加えてください:

1.Defines.mqh ファイルに、新しい識別子を追加する:

#define  ON_CLICK_TAB               (26) // タブを切り替える

//---

2.CTabsと CIconTabs クラス(Tabs.mqhと IconTabs.mqh)のShowTabElements()メソッドに、以下のリストのような行を追加する

//+------------------------------------------------------------------+
//| 選択されているタブの項目のみを表示する。
//+------------------------------------------------------------------+
void CTabs::ShowTabElements(void)
  {
//--- タブが非表示の場合は終了する
   if(!CElement::IsVisible())
      return;
//--- 選択されたタブのインデックスをチェックする
   CheckTabIndex();
//---
   for(int i=0; i<m_tabs_total; i++)
     {
      //--- タブに添付されているアイテムの数を取得する
      int tab_elements_total=::ArraySize(m_tab[i].elements);
      //--- このタブがハイライトされている場合
      if(i==m_selected_tab)
        {
         //--- タブ項目を表示する
         for(int j=0; j<tab_elements_total; j++)
            m_tab[i].elements[j].Show();
        }
      //--- アクティブでないタブの要素を隠す
      else
        {
         for(int j=0; j<tab_elements_total; j++)
            m_tab[i].elements[j].Hide();
        }
     }
//--- メッセージを送る
   ::EventChartCustom(m_chart_id,ON_CLICK_TAB,CElement::Id(),m_selected_tab,"");
  }

//---

3.これで、ON_CLICK_TABという 識別子を持つイベントをカスタム・クラスのハンドラで受け付けることができます。

//+------------------------------------------------------------------+
//| グラフ・イベント・ハンドラ|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
//--- タブプレス・イベント
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_TAB)
     {
      //--- ラジオボタンを押した場合
      if(m_tabs.SelectedTab()==0)
        {
         switch(m_radio_buttons1.SelectedButtonIndex()){
            case  0:
               m_canvas_table1.Show();
               m_canvas_table11.Hide();
               m_canvas_table111.Hide();
               ModifyCanvasTable1(0);
            break;
            case  1:
               m_canvas_table1.Hide();
               m_canvas_table11.Show();
               m_canvas_table111.Hide();
               ModifyCanvasTable1(1);                
            break;
            case  2:
               m_canvas_table1.Hide();
               m_canvas_table11.Hide();
               m_canvas_table111.Show();
               ModifyCanvasTable1(2);               
            break;                        
         }       
         return;
        }
      return;
     }
  }
 
もう一つエラーを見つけました。ツールを起動し、パネルを離してラジオボタンを押し始めました。テーブルが描画されるとき、最初は左端から描画され、その後、必要な座標に引き寄せられます。
 
Alexey Oreshkin:

もう一つエラーを見つけました。ツールを起動し、パネルを離してラジオボタンを押し始めました。テーブルが描画されるとき、最初は左端から描画され、その後、必要な座標に引き寄せられます。

そう、そんなものがあるのだ。このタイプのテーブルを例にして、CanvasTable.mqh ファイルのCCanvasTable::Show() メソッドに次のような行を追加します:

//+------------------------------------------------------------------+
//|| 要素を表示する|
//+------------------------------------------------------------------+
void CCanvasTable::Show(void)
  {
//--- アイテムがすでに表示されている場合は終了する。
   if(CElement::IsVisible())
      return;
//--- すべてのオブジェクトを可視化する
   m_area.Timeframes(OBJ_ALL_PERIODS);
   m_canvas.Timeframes(OBJ_ALL_PERIODS);
   m_scrollv.Show();
   m_scrollh.Show();
//--- 視認性の状態
   CElement::IsVisible(true);
//--- アイテムの移動
   Moving(m_wnd.X(),m_wnd.Y());
  }

//---

この問題が他のアイテムでも発生する場合は、それらのアイテムのShow() メソッドに同じ行を追加します。次回の更新では、すべての要素クラスでこの修正が行われる予定です。

 
フォーム内のタブやコントロールにフォーカスを当てるような機能を開発されましたか?

CEditやCSpinEditに 入力を挿入し、Enterキーを押したりTABキーを押したりした後、次のEditに移るようにしたいのですが。

助けていただけますか?

コミュニティへの貢献に感謝します。
 
RODRIGO CAMPOS FIDELIS:



CEditやCSpinEditに入力を挿入し、Enterキーを押したり、TABキーを押したりした後、エディションを変更したいのですが、プログラムの使い勝手を良くするために、次のエディットにパスしたいのです。

今のところ、これは不可能です。実装方法を考えてみます。
 
Anatoli Kazharski:
現時点では不可能だ。どう実装するか考えてみるよ。
Anatoli Kazharski それについては考えています。 ReadOnly でない ときにCEditをダブルクリックすると青くなって選択される のと同じように
あるいは、コードを実行したときに、スプラッシュやメッセージボックス、自動で要求されるウィンドウで入力を求められるようにする方法はないかな。

いくつか可能性を考えているんだけど、DLLは使いたくないんだ。まだそんなにプロじゃないし。しかし、私は本当に意志を持っています。もしあなたが私にいくつかの指示やアイデアを持っているなら、私は本当に私たちのコードを改善することができます。
 

親愛なるアナトーリ、ご苦労様でした!

ただ、MenuItem.mqhの237行目にタイプミスがあり、うまくコンパイルできないことを指摘しておきます:

" > The type of the menu item can be set using the CMenuItem::TypeMenuItem()") method");

の代わりに

" > The type of the menu item can be set using the CMenuItem::TypeMenuItem() method");

と読むべきです。

 
MT4の最終バージョンですか?
 

編集がいつもちらついている。

https://www.mql5.com/en/forum/274301

 
ラベルのみの作成方法