文章 "图形界面 VII: 页面控件 (第二章)" - 页 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)。(From objects.mqh)
它们没有类似 WindowPointer() 的函数
我可以创建这些对象,但无法将它们附加到窗口。


CWndContainer::AddToElementsArray(m_subwin, _MyEditBox);
在这种情况下不起作用......

2.)
CComboBox 是静态对象吗?是否可以在创建后修改

ComboBox-Listview 中的元素列表?

谢谢!

 

Tol,我赢不了的东西......有两个窗口。从第一个窗口--从主菜单打开第二个窗口,其中有 4 个带图标的选项卡。每个标签页都有自己的表格。

问题是:打开第一个窗口时,总是可以看到最近创建的表格,而在打开窗口之前,标签页已按程序切换到所需的标签页,这并不重要--它被选中是应该的,但其上的表格不是与之绑定的表格,而是最新的表格。

我做了一个例子。打开第一个窗口的图片:

MetaTrader 交易平台截图

EURUSD, D1, 2016.11.03

MetaQuotes Software Corp., MetaTrader 5, 演示版

EURUSD, D1, 2016.11.03, MetaQuotes Software Corp., MetaTrader 5, 演示版


如您所见,选项卡 1 已突出显示,但绑定到选项卡 4 的表格是可见的--这已写入表格本身的列标题中。

此外,如果切换选项卡,表格会放置在应该放置的位置,我用鼠标高亮显示了第二个选项卡:

MetaTrader 交易平台截图

EURUSD, D1, 2016.11.03

MetaQuotes Software Corp., MetaTrader 5, 演示版

EURUSD, D1, 2016.11.03, MetaQuotes Software Corp., MetaTrader 5, 演示版


回到第一个:

MetaTrader 交易平台截图

EURUSD, D1, 2016.11.03

MetaQuotes Software Corp., MetaTrader 5, 演示版

EURUSD, D1, 2016.11.03, MetaQuotes Software Corp., MetaTrader 5, 演示版


我做错了什么?还是出现了错误?

预告片中的文件。指标。

附加的文件:
 
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();
     }
  }
谢谢。它是这样工作的。现在我将在每个选项卡中放入两个重叠的表格--让我们拭目以待;)
 
你好,如果我卷起对话框并更改周期,对话框在 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;
//Code
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' 未找到 Calendar.mqh 443 11
资源文件 'Images\ EasyAndFastGUI\ Controls\ LeftTransp_blue.bmp' 未找到 Calendar.mqh 444 11
资源文件 'Images\ EasyAndFastGUI\ Controls\ calendar_today.bmp' 未找到 Calendar.mqh 738 11
资源文件 'Images\ EasyAndFastGUI\ Controls\ calendar_drop_on.bmp' 未找到 DropCalendar.mqh 435 11
资源文件 'Images\ EasyAndFastGUI\ Controls\ calendar_drop_off.bmp' 未找到 DropCalendar.mqh 436 11
资源文件 'Images\ EasyAndFastGUI\ Controls\ calendar_drop_locked.bmp' 未找到 DropCalendar.mqh 437 11
资源文件 'Images\ EasyAndFastGUI\ Controls\ RightTransp_rotate_black.bmp' 未找到 TreeItem.mqh 247 11
资源文件 'Images\ EasyAndFastGUI\ Controls\ RightTransp_rotate_white.bmp' 未找到 TreeItem.mqh 248 11
资源文件 'Images\ EasyAndFastGUI\ Controls\ pointer_x_resize.bmp' 未找到 Pointer.mqh 8 11
资源文件 'Images\ EasyAndFastGUI\ Controls\ pointer_x_resize_blue.bmp' 未找到 Pointer.mqh 9 11
资源文件 'Images\ EasyAndFastGUI\ Controls\ pointer_y_resize.bmp' 未找到 Pointer.mqh 10 11
资源文件 'Images\ EasyAndFastGUI\ Controls\ pointer_y_resize_blue.bmp' 未找到 Pointer.mqh 11 11
资源文件 'Images\ EasyAndFastGUI\ Controls\ pointer_xy1_resize.bmp' 未找到 Pointer.mqh 12 11
资源文件 'Images\ EasyAndFastGUI\ Controls\ pointer_xy1_resize_blue.bmp' 未找到 Pointer.mqh 13 11
资源文件 'Images\ EasyAndFastGUI\ Controls\ pointer_xy2_resize.bmp' 未找到 Pointer.mqh 14 11
资源文件 'Images\ EasyAndFastGUI\ Controls\ pointer_xy2_resize_blue.bmp' 未找到 Pointer.mqh 15 11
资源文件 'Images\ EasyAndFastGUI \ Icons \ bmp16 \ folder.bmp' 未找到 FileNavigator.mqh 284 11
资源文件 'Images\ EasyAndFastGUI\ Icons\ bmp16\ text_file.bmp' 未找到 FileNavigator.mqh 285 11

我查看了 MQL5 压缩文件,但文件不在那里,有什么办法可以得到它们吗?
谢谢。