文章 "图形界面 X: 渲染表格的新功能 (集成编译 9)" - 页 2

 
Artyom Trishkin:


请使用新的 Build6、7、8 或 9 版本。
 
Anatoli Kazharski:
使用 MetaTrader 5。MetaTrader 4 版本已不再支持,我无法为您提供任何建议。
感谢您的回答。(注:我问的是它是否适用于新版本)

以下内容可以吗?
//+------------------------------------------------------------------+
//| Создаёт общую площадь                                            |
//+------------------------------------------------------------------+
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:
感谢您的答复。(注:我问的是在新版本中是否有效) 下面的内容可以吗?


//+------------------------------------------------------------------+
//| Создаёт общую площадь                                            |
//+------------------------------------------------------------------+
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 的公共区域创建一个新方法:
   //--- 创建一个调色板,用于选择颜色
   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:
在最新版本的 中, 对象坐标的 计算方法 有所不同 您需要 要么使用 新规则 指定 对象的坐标,要么 在自己的 方法 中按 常规 重新计算 坐标 。 ......

感谢您提供的教程。我检查并更改了 坐标 计算方法。

能否请您 W_DIALOG 窗口中检查一下? 该库中的

ColorPicker 是用于微调自定义颜色的非常强大的工具,但我想知道简单的颜色表是否更便于日常使用。
 
感谢您的努力!!这个版本可以按列排序和删除行吗?
 
stt:
感谢您提供的教程。我检查并更改了 坐标 计算。ColorPicker 在我的 环境 中运行良好 ,但仅限于在主窗口 (W_MAIN) 中显示。

,能否请您在 W_DIALOG 窗口检查一下?

,该库中的 ColorPicker 是用于微调自定义颜色的非常强大的工具,但我想知道简单的颜色表是否更便于日常使用。
请看看看这个:

 
dantetemp:
感谢您的辛勤工作!!这个版本可以按列排序和删除行吗?
还没有。但很快就会实现。
 
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 函数后,当我点击输入框右侧的递增/递减时,也会得到这样的值:


用键盘输入时,一切正常。

原因何在?