文章 "图形界面 X: 简单快速开发库的更新 (版本 2)" - 页 3

 
Alexey Oreshkin:
何时更新?

如果您急需更新,可以自行添加以下更改:

1.在Defines.mqh 文件中添加新的标识符:

#define  ON_CLICK_TAB               (26) // 开关选项卡

//---

2.在CTabsCIconTabs 类(文件Tabs.mqhIconTabs.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,"");
  }

//---

现在,自定义类的处理程序可以接受标识符为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 键后更改版本,我希望转到下一个 Edit,以便在我的程序中更好地使用。

目前这是不可能的。我会考虑如何实现。
 
Anatoli Kazharski:
目前还无法实现。我会考虑如何实现。
Anatoli Kazharski 我正在考虑这个问题。有什么方法可以让我通过代码激活 "编辑 "模式,就像当它们不是 只读 模式时 ,我们在 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

 
如何只创建标签?