記事"グラフィカルインタフェースVII: タブコントロール(チャプター2)"についてのディスカッション - ページ 2

 
Anatoli Kazharski:

もちろんだ。)

このクラス(CTabs)の次のアップデートは、「複数行タブ・モード」です。

ここ(複数行)のように:

スーパー。テーブルとリストが今のところテーブルとリストでしかないのは残念だ。今のところ、インタラクティブな機能はなく、実質的にデータの視覚化としての役割しか果たしていない。

もちろん、リストやテーブルの必要な列や行を取り出して選択し、それに対して何らかの操作を行いたい - 例えば、リストがあり、チェックボックスを付ける、あるいは一般的に必要な行を完全に選択し、選択された行の一般的なデータを別のウィンドウに表示する...。そのような何かはスーパーだろう :)

しかし、これを可能にするには、このデータを操作するためのメソッドを追加する必要がある。もしかしたら、すでにあるのかもしれないが。

 
Artyom Trishkin:

素晴らしい。テーブルやリストが単なるテーブルやリストであるのは残念だ。今までのところ、それらは実質的にインタラクティブ性なしにデータの視覚化としてのみ機能している。

...

上記の大部分については、全て揃っている。

リスト(CListView)で項目を選択するとイベントが発生し、どの項目が選択されたのか、現在の値が選択されたのかを判断することができる。

テーブル(CTable)でも同様です。テーブルの行を選択すると、イベントが生成され、そのパラメータには行インデックス(dparam パラメータ)が含まれ、CTable::GetValue()メソッドを使用してこの行のセルの値を取得することができます:

//+------------------------------------------------------------------+
//| 指定されたインデックスの値を返す。 
//+------------------------------------------------------------------+
string CTable::GetValue(const int column_index,const int row_index)
  {
//--- 列の範囲から出ないかチェックする
   int csize=::ArraySize(m_vcolumns);
   if(csize<1 || column_index<0 || column_index>=csize)
      return("");
//--- 行範囲の終了をチェックする
   int rsize=::ArraySize(m_vcolumns[column_index].m_vrows);
   if(rsize<1 || row_index<0 || row_index>=rsize)
      return("");
//--- 返り値
   return(m_vcolumns[column_index].m_vrows[row_index]);
  }

//---

また、テーブルのセルを編集するモードでは、イベントが生成され、そのパラメータ(パラメータsparam)には、"column_row_text "の形式で、列番号、行番号、編集中のセルの現在の値を持つ文字列を取得することができます。

アルチョム・トリシキン

もちろん、リストやテーブルの必要な列や行を取り出して選択し、それに対して何らかの操作を行いたいんだ。例えば、リストがあって、チェックボックスを付けるとか、一般的に必要な行を選択して、選択した行の一般的なデータを別のウィンドウに表示するとか...。そのようなものがあれば最高です :)

チェックボックスとラジオボタンを持つリストについては、後で別のクラスを作るつもりだ。

 
1.)
単純なCLabelやCEDITコントロールをフォームに追加する方法がわかりません(objects.mqhより) これらはWindowPointer()のような関数を持っていません。(objects.mqhより)
これらのオブジェクトはWindowPointer()のような関数を持って いません。
これらのオブジェクトを作成することはできますが、ウィンドウにアタッチすることができません。


CWndContainer::AddToElementsArray(m_subwin, _MyEditBox);
この場合、動作しません...

2.)
CComboBoxは静的オブジェクトですか?の要素リストを変更することは可能ですか?

ComboBoxの作成後、ComboBox-Listviewの要素のリストを変更することは可能ですか?

ありがとうございます!

 

トール、何か勝てない...。つのウィンドウがある。メインメニューから2つ目のウィンドウを開くと、アイコンの付いた4つのタブがある。それぞれのタブにはテーブルがあります。

問題はこうです:最初のウィンドウを開くと、一番最近に作られたテーブルが常に表示され、ウィンドウを開く前にプログラムで必要なタブに切り替えても関係ありません。

例を作ってみた。最初のウィンドウを開いたところ:

ご覧のように、タブ1はハイライトされていますが、タブ4にバインドされているテーブルが表示されています - それはテーブル自体の列ヘッダーに書かれています。

さらに、タブを切り替えると、テーブルがあるべき場所に配置されるので、マウスで2番目のタブを強調表示しました:

最初の画面に戻る

私は何か間違っていますか?それともバグ?

トレーラーのファイルインジケータ.

ファイル:
 
Artyom Trishkin:

...

何か間違っているのだろうか?それともバグですか?

CTabs タブでは正しく動作します。しかし、CIconTabs タブについては、ライブラリエンジンの個人配列と、ダイアログボックスを 開いたときに選択されたタブの内容を自動的に表示する 機能をまだ作っていません。これは次のアップデートで修正する予定です。

しかし、一時的な解決策として、すでにカスタム・クラスでダイアログ・ボックスが開かれたことを追跡し、下のリストのようにタブを更新することができます:

//+------------------------------------------------------------------+
//| イベントハンドラ|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   if(id==CHARTEVENT_CUSTOM+ON_OPEN_DIALOG_BOX)
     {
      if(lparam==m_window2.Id())
         m_icon_tabs.ShowTabElements();
     }
  }
 
Anatoli Kazharski:

CTabs タイプのタブでは正しく動作します。しかし、CIconTabs タブについては、ライブラリエンジンの個人配列と、ダイアログウィンドウを開いたときに選択されたタブの内容を自動的に表示する 機能をまだ作っていません。これは次のアップデートで修正する予定です。

しかし、一時的な解決策として、ダイアログボックスが開いたことをカスタムクラスで追跡し、下のリストのようにタブを更新することができます:

//+------------------------------------------------------------------+
//| イベントハンドラ|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   if(id==CHARTEVENT_CUSTOM+ON_OPEN_DIALOG_BOX)
     {
      if(lparam==m_window2.Id())
         m_icon_tabs.ShowTabElements();
     }
  }
ありがとうございます。このように動作します。では、それぞれのタブに2つの重なり合うテーブルを入れてみます。)
 
ダイアログをロールアップして期間を変更すると、MT4でダイアログが表示されません。
 
コンパイル時に、
'return' - cannot convert from const pointer to nonconst pointer        SplitButton.mqh 90      65
のようなエラーが発生する。該当行のConstを削除すれば治る。
 

タブに入力フィールドを追加しようとしているのですが、うまくいきません。

input double whenToTrail=10.3;

class CProgram: public CWndEvents
{
protected:
   CSpinEdit         m_StartTS;
//コード
protected:
   bool              CreatetrailStop(const int x_gap, const int y_gap, const string text);
};


そこで関数

bool CProgram::CreatetrailStop(const int x_gap, const int y_gap, string text)
  {
//--- メイン要素へのポインタを保存する
   m_StartTS.WindowPointer(m_window);
//--- 座標
   int x = m_window.X() + x_gap;
   int y = m_window.Y() + y_gap;
//--- タブの予約
   m_tabs.AddToElementsArray(1, m_StartTS);
//--- プロパティ
   m_StartTS.XSize(95);
   m_StartTS.YSize(15);
   m_StartTS.EditXSize(40);
   m_StartTS.MinValue(0.01);
   m_StartTS.StepValue(0.01);
   m_StartTS.SetDigits(1);
   m_StartTS.SetValue(NormalizeDouble(whenToTrail,1));
   
   m_StartTS.ResetMode(true);
//--- コントロールの作成
   if(!m_StartTS.CreateSpinEdit(m_chart_id, m_subwin, text, x, y))
      return(false);
//--- オブジェクト・グループの共通配列にオブジェクトを追加する。
   CWndContainer::AddToElementsArray(0, m_StartTS);
   return(true);
  }



で、チャートを削除してもオブジェクトは残ります。
 
インストールしようとしたのですが、コンパイルすると次のようなエラーが出ます:

リソースファイル '∕ Images ∕ EasyAndFastGUI∕ Controls ∕ LeftTransp_black.bmp' not found Calendar.mqh 443 11
resource file '¦画像¦EasyAndFastGUI¦コントロール¦ LeftTransp_blue.bmp' not found Calendar.mqh 444 11
resource file '¦画像 ¦ EasyAndFastGUI ¦コントロール ¦ calendar_today.bmp' not found Calendar.mqh 738 11
resource file '¦画像 ¦ EasyAndFastGUI ¦コントロール ¦ calendar_drop_on.bmp' not found DropCalendar.mqh 435 11
リソースファイル '¦画像 ¦ EasyAndFastGUI ¦コントロール ¦ calendar_drop_off.bmp' not found DropCalendar.mqh 436 11
リソースファイル '¦画像 ¦ EasyAndFastGUI ¦コントロール ¦ calendar_drop_locked.bmp' not found DropCalendar.mqh 437 11
resource file '¦画像¦EasyAndFastGUI¦コントロール¦RightTransp_rotate_black.bmp' not found TreeItem.mqh 247 11
リソースファイル ' \ Images ˶ EasyAndFastGUI ˶ Controls ˶ RightTransp_rotate_white.bmp' not found TreeItem.mqh 248 11
リソースファイル '¦画像 ¦ EasyAndFastGUI ¦コントロール ¦ pointer_x_resize.bmp' not found Pointer.mqh 8 11
リソースファイル '¦画像¦EasyAndFastGUI¦コントロール¦ pointer_x_resize_blue.bmp' not found Pointer.mqh 9 11
リソースファイル '∕画像 ∕ EasyAndFastGUI ∕ コントロール ∕ pointer_y_resize.bmp' not found Pointer.mqh 10 11
resource file '¦画像¦EasyAndFastGUI¦コントロール¦ pointer_y_resize_blue.bmp' not found Pointer.mqh 11 11
リソースファイル '¦画像 ¦ EasyAndFastGUI ¦コントロール ¦ pointer_xy1_resize.bmp' not found Pointer.mqh 12 11
resource file '¦画像¦EasyAndFastGUI¦コントロール¦ pointer_xy1_resize_blue.bmp' not found Pointer.mqh 13 11
リソースファイル '¦画像 ¦ EasyAndFastGUI ¦コントロール ¦ pointer_xy2_resize.bmp' not found Pointer.mqh 14 11
resource file '¦画像¦EasyAndFastGUI¦コントロール¦ pointer_xy2_resize_blue.bmp' not found Pointer.mqh 15 11
リソースファイル '∕画像 ∕EasyAndFastGUI ∕アイコン ∕bmp16 ∕folder.bmp' not found FileNavigator.mqh 284 11
リソースファイル '∕画像∕EasyAndFastGUI∕アイコン∕bmp16∕text_file.bmp' not found FileNavigator.mqh 285 11

MQL5のzipファイルを見ましたが、ファイルがありません。
ありがとうございました。