記事"グラフィカルインタフェースX:レンダーテーブルの新機能(ビルド9)"についてのディスカッション - ページ 2

 
Artyom Trishkin:


新しいBuild6,7,8,9でお願いします。
 
Anatoli Kazharski:
MetaTrader 5を使ってください。MetaTrader 4のバージョンはもうサポートされていないので、何もアドバイスできません。
ご回答ありがとうございました。(n.b.私はそれが新しいビルドで動作するかどうかを尋ねました)

下記はOKですか?
//+------------------------------------------------------------------+
//| Создаёт общую площадь                                            |
//+------------------------------------------------------------------+
bool CColorPicker::CreateArea(void)
  {
//--- Формирование имени объекта
   string name=CElementBase::ProgramName()+"_color_picker_bg_"+(string)CElementBase::Id();
//--- Координаты
   int x=CElementBase::X();
   int y=CElementBase::Y();
//--- Создать объект
   if(!m_area.Create(m_chart_id,name,m_subwin,x,y,m_x_size,m_y_size))
      return(false);
//--- Свойства
   m_area.BackColor(m_area_color);
   m_area.Color(m_area_border_color);
   m_area.BorderType(BORDER_FLAT);
   m_area.Corner(m_corner);
   m_area.Selectable(false);
   m_area.Z_Order(m_area_zorder);
   m_area.Tooltip("\n");
//--- Координаты
   m_canvas.X(x);
   m_canvas.Y(y);
//--- Размеры
   m_canvas.XSize(m_x_size);
   m_canvas.YSize(m_y_size);

//--- Отступы от крайней точки
   m_area.XGap(CElement::CalculateXGap(x));
   m_area.YGap(CElement::CalculateYGap(y));
//--- Сохраним указатель объекта
   CElementBase::AddToArray(m_area);
   return(true);
  }


 
stt:
ご回答ありがとうございました。(n.b.新しいビルドで動くか聞いてみました) 以下でOKでしょうか?


//+------------------------------------------------------------------+
//| Создаёт общую площадь                                            |
//+------------------------------------------------------------------+
bool CColorPicker::CreateArea(void)
  {
//--- Формирование имени объекта
   string name=CElementBase::ProgramName()+"_color_picker_bg_"+(string)CElementBase::Id();
//--- Координаты
   int x=CElementBase::X();
   int y=CElementBase::Y();
//--- Создать объект
   if(!m_area.Create(m_chart_id,name,m_subwin,x,y,m_x_size,m_y_size))
      return(false);
//--- Свойства
   m_area.BackColor(m_area_color);
   m_area.Color(m_area_border_color);
   m_area.BorderType(BORDER_FLAT);
   m_area.Corner(m_corner);
   m_area.Selectable(false);
   m_area.Z_Order(m_area_zorder);
   m_area.Tooltip("\n");
//--- Координаты
   m_canvas.X(x);
   m_canvas.Y(y);
//--- Размеры
   m_canvas.XSize(m_x_size);
   m_canvas.YSize(m_y_size);

//--- Отступы от крайней точки
   m_area.XGap(CElement::CalculateXGap(x));
   m_area.YGap(CElement::CalculateYGap(y));
//--- Сохраним указатель объекта
   CElementBase::AddToArray(m_area);
   return(true);
  }


ライブラリの最新バージョンでは オブジェクトの座標 計算が異なっています 新しいルールで オブジェクトの座標を 指定するか、 独自の メソッドで 通常の 方法で座標を 再計算 する必要が あります。

たとえば、次のようにする必要があります:

WndEvents.mqhのpublicエリアに新しいメソッドを作成します:
   //--- 色を選択するためのカラーパレットを作成する。
   bool              CreateColorPicker(CColorPicker &color_picker, CWindow &wnd_pointer, int wnd_index,int x,int y);
クラス本体の外に、 メソッド本体を作成します:
//+------------------------------------------------------------------+
//|| 色を選択するためのカラーパレットを作成する。
//+------------------------------------------------------------------+
bool CWndEvents::CreateColorPicker(CColorPicker &color_picker, CWindow &wnd_pointer, int wnd_index, int x, int y)
  {
//--- 座標を再計算する
   int x_gap=x-wnd_pointer.X();
   int y_gap=y-wnd_pointer.Y();
//--- ウィンドウ・ポインタを保存する
   color_picker.WindowPointer(wnd_pointer);
//--- 要素の作成
   if(!color_picker.CreateColorPicker(m_chart_id,m_subwin,x_gap,y_gap))
      return(false);
//--- ベースの要素へのポインタを追加する。
   CWndContainer::AddToElementsArray(wnd_index,color_picker);
   return(true);
  }
//+------------------------------------------------------------------+

そしてCProgram.mqhにColorPickerを作成します:
   //--- カラーピッカー
   x=m_window_main.X2()+1;
   y=m_window_main.Y();
   if(!CreateColorPicker(m_color_picker,m_window_main,m_window_main_index,x,y))
      return(false);
この例を見てください


 
stt:
...
MQL4バージョンをサポートしていないことは知っていますが、MQL4が理由ではないと思います。
問題を示すスクリーンショットまたはビデオを表示し、テストファイル(MetaTrader 5)をメッセージに添付してください。
 
Artyom Trishkin:
ライブラリの最新バージョンでは オブジェクトの座標 計算が異なっていた 新しいルールで オブジェクトの座標を 指定するか、 独自の メソッドで 通常の 方法で座標を 再計算 する必要が あります。 ....

チュートリアルありがとう。 座標 計算を 確認して変更しました。私の環境では ColorPickerはうまく動作しています しかし、メインウィンドウ(W_MAIN)に表示した場合のみです。

W_DIALOGウィンドウで確認していただけますか?

このライブラリのColorPickerはカスタムカラーを微調整するための非常に強力なツールですが、日常的に使用するにはシンプルなカラーテーブルの方が便利なのではないでしょうか?
 
ご尽力に感謝します!このバージョンでは、列によるソートと行の削除は可能ですか?
 
stt:
チュートリアルをありがとう。 座標 計算を 確認して変更しました。私の環境 ではColorPickerは正常に動作して いますが、メインウィンドウ(W_MAIN)に表示した場合のみです。

W_DIALOGウィンドウで確認していただけないでしょうか。

このライブラリのColorPickerはカスタムカラーを微調整するための非常に強力なツールですが、日常的に使用するにはシンプルなカラーテーブルの方が便利かと思います。
お願いします。これを見てください:

 
dantetemp:
ご苦労様です!このバージョンでは、列によるソートと行の削除は可能ですか?
まだです。でもすぐにできるようになります。
 
dantetemp:
ご苦労様です!列によるソートと行の削除はこのバージョンで可能ですか?
すでに可能です。最新バージョンのライブラリはこちらの記事からダウンロードしてください: Graphical Interfaces X: Sorting, Table Reconstruction and Cell Controls (build 11)
 

こんにちは。入力フィールド SpinEditがあります:

bool CProgram::CreateSpinEdit_TradingLot(const string text)
{
//--- ウィンドウ・ポインタを保存する
   m_spin_edit_Trading_lot.WindowPointer(m_window);
   m_tabs.AddToElementsArray(1,m_spin_edit_Trading_lot);
//--- 座標
   int x=m_window.X()+SPINEDIT14_GAP_X;
   int y=m_window.Y()+SPINEDIT14_GAP_Y;
//--- 値
   double v=(m_spin_edit_Trading_lot.GetValue()==WRONG_VALUE) ? 0.01 : m_spin_edit_Trading_lot.GetValue();
//--- 作成前にプロパティを設定する
   m_spin_edit_Trading_lot.XSize(90);
   m_spin_edit_Trading_lot.YSize(18);
   m_spin_edit_Trading_lot.EditXSize(50);
   m_spin_edit_Trading_lot.MaxValue(100);
   m_spin_edit_Trading_lot.MinValue(0.01);
   m_spin_edit_Trading_lot.StepValue(0.01);
   m_spin_edit_Trading_lot.SetDigits(2);
   m_spin_edit_Trading_lot.SetValue(v);
   m_spin_edit_Trading_lot.ResetMode(false);
   m_spin_edit_Trading_lot.AreaColor(clrWhite);
//--- コントロールの作成
   if(!m_spin_edit_Trading_lot.CreateSpinEdit(m_chart_id,m_subwin,text,x,y))
      return(false);
//--- オブジェクト・グループの共通配列にオブジェクトを追加する。
   CWndContainer::AddToElementsArray(0,m_spin_edit_Trading_lot);
   return(true);
}


イベントハンドラがあります:

void CProgram::OnEventSpinEdit_TradingLot(void)
{
   TradingLot = m_spin_edit_Trading_lot.GetValue();
   Print("TradingLot = " + NormalizeDouble(TradingLot,2));
}

そして、NormalizeDouble 関数の後でも、入力フィールドの右側のインクリメント/デクリメントをクリックすると、そのような値が得られます:


キーボードから入力する場合は、すべて正しいです。

何が原因でしょうか?