文章 "图形界面 VI: 复选框控件,编辑框控件以及它们的组合类型 (第一章)"

 

新文章 图形界面 VI: 复选框控件,编辑框控件以及它们的组合类型 (第一章)已发布:

本文是在MetaTrader终端图形界面开发库系列中第六部分的开端,在第一章中,我们将讨论复选框控件,编辑框控件以及它们的组合类型。

为了作为例子,我们将在测试程序中加入这些控件,这样您就可以看到它是如何工作的了,让我们加上两个CCheckBox类型的复选框和一个CCheckBoxEditCCheckComboBox类型的控件,CCheckBoxEdit类型控件的可用性将取决于第三个复选框的状态,而CCheckComboBox类型的控件将由第四个复选框的状态定义。

 图 7. 混合类型控件的测试。

图 7. 混合类型控件的测试。

 

作者:Anatoli Kazharski

 

但在达到极值时 "眨眼 "在指标中不起作用--Sleep()...

阿纳托利,再写一个改进要求:延迟应该通过定时器来组织,尤其是你已经拥有了几乎所有相关功能。

 
Artyom Trishkin:

但在达到极值时 "眨眼 "在指标中不起作用--Sleep() ...

阿纳托利,再写一个改进要求:延迟应该通过定时器来组织,尤其是你已经具备了几乎所有的条件。

我已经写下来了。清单上的要求越来越多了。谢谢。)
 
令人印象深刻....:)
 

阿纳托利,您创建的库已准备就绪,我决定尝试用它为自己创建一个小项目。我在本专题中写下这些内容是为了让大家清楚问题所指的是哪个元素。对于输入框 (SpinEdit),有必要以万分之二的精度输入数值。我在创建字段的过程中设置了相应的属性(StepValue 和 StepDigits)(见下面的代码):

...
   m_spin_edit_Depo.MaxValue(10000000);
   m_spin_edit_Depo.MinValue(0);
   m_spin_edit_Depo.StepValue(0,01);
   m_spin_edit_Depo.SetDigits(2);
   m_spin_edit_Depo.SetValue(v);
...

编译后我发现了一个错误:"StepValue" - 没有任何重载可以应用于函数调用。

从逻辑上讲,如果值的字符数小于 1,那么步长值的增量也可以小于 1。同时,在类的代码中,对输入值的检查只针对非负值。

...

   //--- Шаг значения

   double            StepValue(void)                          const { return(m_step_value);               }
   void              StepValue(const double value)                  { m_step_value=(value<=0)? 1 : value; }
...

问题是我不清楚错误从何而来。

我有一个问题或愿望。如果我们不需要控制最小值/最大值,而只受限于用于存储最小值/最大值的 变量的大小呢?根据我对代码的理解,设置最小值/最大值是强制性的。是否可以将我的愿望添加到改进列表中?也就是说,如果未指定字段的最小值/最大值,则仅在输入值进入双类型变量的范围时对输入值进行控制。

 
Pavel Trofimov:

编译后,我发现以下错误:"StepValue" - 没有任何重载可以应用于函数调用。

...

问题是,我不清楚错误从何而来。

你打错了。用点". "作为分隔符。:

   m_spin_edit_Depo.StepValue(0. 01);

//---

接下来,我有一个问题或愿望。如果我不需要控制最小值/最大值,而只受限于用于存储该值的 double 类型变量的大小,该怎么办 ?根据我对代码的理解,设置最小值/最大值是必须的。是否可以将我的愿望添加到改进列表中?也就是说,如果未指定字段的最小值/最大值,则只有在输入值进入双类型变量的范围时才会对输入值进行控制。

您可以暂时强制设置最大值和最小值。比如

   m_spin_edit_Depo.MaxValue(DBL_MAX);
   m_spin_edit_Depo.MinValue(-DBL_MAX);
 
Anatoli Kazharski:

您有一个错别字。请使用句号". "作为分隔符。:

//---

现在可以强制使用最大值和最小值。就是这样:

非常感谢你关于错别字的提示。在我的代码中,我的眼睛是 "肥皂"。关于强制设置最大值和最小值--这很好。我会自己写下来的。再次感谢您!
[删除]  
MetaQuotes Software Corp.:

新文章《图形界面 VI:复选框控件、编辑控件及其混合类型(第 1 章)》已出版:

作者: Anatoli KazharskiAnatoli Kazharski

您好,先生,我对您的文章很感兴趣,但我还是图形用户界面和 mql 方面的新手,
,请您告诉我如何获取 Spin edit 的值,以便将其读入 EA。

谢谢

 
Hidayat Nur Wahit:

您好,先生,我对您的文章很感兴趣,但我还是图形用户界面和 mql 方面的新手,
,请您告诉我如何获取 Spin edit 的值,以便将其读入 EA。

致谢

例如,文章中的CProgram::OnEvent() 事件处理程序:

void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
//--- Событие нажатия на текстовой метке
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL)
     {
      ::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam);
      //--- Если нажали на первом чекбоксе
      if(lparam==m_checkbox1.Id())
        {
         m_checkbox2.CheckBoxState(m_checkbox1.CheckButtonState());
         m_spin_edit1.SpinEditState(m_checkbox1.CheckButtonState());
         
         Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue());
        }

      if(lparam==m_checkbox3.Id())
        {
         m_checkboxedit1.CheckBoxEditState(m_checkbox3.CheckButtonState());
         
         Print("m_checkboxedit1.GetValue(): ",m_checkboxedit1.GetValue());
        }

      if(lparam==m_checkbox4.Id())
        {
         m_checkcombobox1.CheckComboBoxState(m_checkbox4.CheckButtonState());
        }

      if(lparam==m_checkbox5.Id())
        {
         m_slider1.SliderState(m_checkbox5.CheckButtonState());
         m_dual_slider1.SliderState(m_checkbox5.CheckButtonState());
         
         Print("m_slider1.GetValue(): ",m_slider1.GetValue());
         Print("m_dual_slider1.GetLeftValue(): ",m_dual_slider1.GetLeftValue());
         Print("m_dual_slider1.GetRightValue(): ",m_dual_slider1.GetRightValue());
        }
     }

   if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
     {
      ::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam);
      
      if(lparam==m_spin_edit1.Id())
        {
         Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue());
        }
        
      if(lparam==m_checkboxedit1.Id())
        {
         Print("m_checkboxedit1.GetValue(): ",m_checkboxedit1.GetValue());
        }
      
      if(lparam==m_slider1.Id())
        {
         Print("m_slider1.GetValue(): ",m_slider1.GetValue());
        }
        
      if(lparam==m_dual_slider1.Id())
        {
         Print("m_dual_slider1.GetLeftValue(): ",m_dual_slider1.GetLeftValue());
         Print("m_dual_slider1.GetRightValue(): ",m_dual_slider1.GetRightValue());
        }
     }

   if(id==CHARTEVENT_CUSTOM+ON_CLICK_INC || id==CHARTEVENT_CUSTOM+ON_CLICK_DEC)
     {
      ::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam);
      
      if(lparam==m_spin_edit1.Id())
        {
         Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue());
        }
        
      if(lparam==m_checkboxedit1.Id())
        {
         Print("m_checkboxedit1.GetValue(): ",m_checkboxedit1.GetValue());
        }
     }
  }
[删除]  
Anatoli Kazharski:

例如,CProgram::OnEvent() 事件处理程序中的一篇文章:

谢谢您,现在它能很好地读取数值,并将应用于我的 EA。

Regard's
 

亲爱的 阿纳托利- 卡扎斯基( Anatoli Kazharski),非常感谢你提供这个很棒的程序库!

我非常喜欢它所产生的界面的外观和感觉。

当我开始根据我的个人需要调整测试库 10.mq5 时,我认为值得一提的是,在类 CSpinEdit 中添加以下方法对我帮助很大

void CSpinEdit::LabelText(const string new_text)

方法对我帮助很大,因为我使用的是"...... ",而不是"...... "。原因是我根据 CComboBox 的状态使用 CSpinEdit 来处理不同类型的值。使用 LabelText(text) 更改标签并选择适当的编辑格式后,在调用

void CSpinEdit::ChangeValue(const double value)

再次感谢