用 MQL 编写的用户界面图库 - 页 65

 

需要考虑的一般主题列表:

1. intellisense 列表中的方向和选择右侧窗口的功能。

2.以编程方式打开和关闭窗口。

3. 在 intellisense 列表中确定方向,并在正确的窗口中选择正确的元素。

4. 在单个元素属性列表中导航。

5.解析元素名称和窗口封装函数

6. 选定元素的参数值返回 到其类型的变量中。考虑几种不同元素的三种类型。

7.设置不同类型元素的参数值。让我们看看这些值将如何出现在这些元素的界面窗口中。

8.返回一个元素的参数值,修改并将该值转发给另一个元素。考虑不同类型的元素和数值,测试不同类型元素在不同窗口中的转发。

9.返回前一个值 (_V_LAST)。何时以及在何种情况下需要最后一个值(不要与当前值混淆)。

10.测试不同类型元素的 ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK 状态的设置。

11.让我们尝试将不同类型元素(例如,输入框与按钮和滑块)的值变化联系起来并使其同步。假设一个元素(手动或软件)的值发生变化时,第二个元素的值也会相应变化。

12.让我们尝试通过封装函数以编程方式重置滑块和带按钮输入框的范围边界。我还没有时间进行测试,但有迹象表明这将有效。不过,让我们拭目以待。

13.让我们尝试通过封装函数返回元素状态。它包含在功能中,但我还没来得及测试。所以,让我们拭目以待......结果未知。

14.我们来获取和设置文本和元素基色的颜色。我们可以尝试将这些颜色与一些简单的事件或值边界联系起来。

15.下面我将详细介绍如何浏览和阅读新的 API 文件打印输出。

//------------------------------------------

我们已经介绍过的主题用黄色标出。


今天我们将回顾

11.同步(链接)更改不同类型元素的值:例如,带有按钮和滑块的输入框。这样,当改变一个元素(手动或软件)的值时,第二个元素的值也会相应改变。

12.让我们尝试通过封装函数以编程方式重置滑块和带按钮输入框的范围边界。我还没有时间进行测试,但有迹象表明它可以成功。不过,让我们拭目以待。

13.让我们尝试通过封装函数返回元素状态。它包含在功能中,但我还没来得及测试。所以,让我们拭目以待......结果未知。

Документация по MQL5: Основы языка / Операторы / Оператор возврата return
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
  • www.mql5.com
Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Результат вычисления выражения возвращается...
 
主题很大,有很多 gif 和图片。耗时...
 

11.不同类型元素的参数绑定

细心的人会发现,在多窗口图形用户界面中,不同的元素往往通过参数值、属性和状态联系在一起。例如

//-------------------------------------------------------------------------------------------------------------------------

  • 输入的文本突然出现在其他窗口的元素中。
  • 可通过 +/- 按钮调整的设置可改变滑块或字段中数字的位置。
  • 文本字段将字符串转换为其他窗口的表格单元格。
  • 下拉列表选项可改变项目的颜色或字体。
  • 单击复选框可锁定一组单选按钮。
  • 等等。

//-------------------------------------------------------------------------------------------------------------------------

你会觉得这其中一定存在着隐形的元素连接。确实存在。但只有外部观察者才会觉得它是不可见的。对于开发人员来说,它是显而易见的,今天我们就来详细探讨一下。

1.元素连接有两个方面:

  • 在图形界面的 程序 这种联系是可视的
  • 技术 - 所有参数都通过内部程序算法进行连接。

图形引擎的存在简化了连接的技术实现。

让我来解释一下:

在传统的 "智能交易系统 "中,每个参数都是用户 发明 命名 存储 处理的 。这是一项无法绕过的例行工作。然而,在使用图形引擎的情况下,构造函数中创建的项目会自动接收参数以及存储位置和处理/返回函数。此外,用户还能获得它们的属性,如类型范围过去值 等。这大大简化了劳动。从理论上讲,可以将 GUI 元素的现成参数用作其他用户参数,将它们直接与交易逻辑相连。例如,手数追踪止损 和其他参数,不是来自它们自己的变量,而是来自负责其值的设置字段。

一些一般性结论

1. 程序 中出现图形控制 = 出现现成的程序参数 + 其属性+返回/设置值的功能

2. 界面程序窗口中的控件越多, 交易逻辑交易信息输入/输出 中涉及的参数

3. 设置越多,窗口越多--控制能力越强市场数据输出带宽越宽(不影响自动化)

4. 4. 市场数据输出的控制力越强、带宽越宽,交易者的意识就 越强

5. 意识 乘以自动化和控制 = 交易机会的扩大

我要补充的是,自动化往往与人工控制相对立。他们说,图形界面意味着手动交易。但事实并非如此。软件界面并不排斥自动化,而是扩大了自动化,增加了一个 "梯度"--它提供了三种选择:手动控制 半自动交易 自主模式

交易者只需选择一个选项即可。

天哪,为此创建一个窗口简直易如反掌。

//---------------------------------------------------------------------------------------------------


2.下面我们来看看控件参数绑定的技术实现。

我们来看几个实际例子:

1.让我们打开一个熟悉的设置窗口:

   //------------------------------------------------
   //Open the window "Settings example 1".

   w_6_Settings_example_1();
   //------------------------------------------------



2. 打开 API 文件,在 On_Gui_Event() 函数中找到已打开窗口的元素:




提醒: 所有控件事件都会进入 On_Gui_Event() 函数;

为此,我们将在该函数内部写入部分参数链接,在函数体外写入部分参数链接


1.让我们在带按钮 (S_EDIT) 的 "旋转数值 "字段和带滑块 (H_SLIDER) 的 "滚动数值 "字段之间建立联系:

  • 在 API 文件中找到带按钮 "旋转值 "的字段。
  • 将值旋转到 "滚动值 "滑块上。

*重要提示:元素和窗口的功能应从 UIDATA 文件移至 API 文件的底部,以便 intellisense 正常工作。
case Settings_example_1___Spin_the_value:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the value is set?
               //------------------------------------------------------------------------------------------------------
               //Min value:  NOT SET  |   Max value:  NOT SET  |   V_step:  1.7  |   Default value:  468.99  |  Digits: 3
               //------------------------------------------------------------------------------------------------------
               w6_i_p3_H_SLIDER_Roll_the_value((int)value);
               
                 
               Alert("S_EDIT Spin_the_value    value entered: ",value);
               //------------------------------------------------------------------------------------------------------
               //Your comment: Send the value to Slider.
               //------------------------------------------------------------------------------------------------------
               break;

结果:我们用按钮更改字段中的值,而滑块会自己移动

(重要提示:滑块只能在其范围内移动(本例中为 0 至 100)。如果超出范围,数值不会改变,但日志中会显示错误


//----------------------------------------------------------------------------------------------------------------

3.让我们进行角色转换。滑块将控制输入框中的数值:

  • 在 API 文件中找到 "滚动值 "滑块。
  • 将值发送到带 "旋转值 "按钮的字段。
case Settings_example_1___Roll_the_value:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the slider's handle is moved?
               //------------------------------------------------------------------------------------------------------
               //Min value:  0  |   Max value:  100  |   V_step:  1  |   Default value:  75  |  Digits: Integer value
               //------------------------------------------------------------------------------------------------------
               w6_d_p5_S_EDIT_Spin_the_value((double)value);
               
               //Alert("H_SLIDER Roll_the_value    value entered: ",value);
               //------------------------------------------------------------------------------------------------------
               //Your comment: Send the value to Spin edit.
               //------------------------------------------------------------------------------------------------------
               break;

结果:移动滑块手柄时,带按钮的字段会同步改变值。


//----------------------------------------------------------------------------------------------------------------


4.我们来编写滑块和带按钮字段之间的相互控制:

  • 在 API 文件中找到这两个元素。
  • 编写值的发送。带按钮的字段将其值发送给滑块,滑块将其值发送给带按钮的字段。

case Settings_example_1___Spin_the_value:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the value is set?
               //------------------------------------------------------------------------------------------------------
               //Min value:  NOT SET  |   Max value:  NOT SET  |   V_step:  1.7  |   Default value:  468.99  |  Digits: 3
               //------------------------------------------------------------------------------------------------------
               w6_i_p3_H_SLIDER_Roll_the_value((int)value);
               
                 
               Alert("S_EDIT Spin_the_value    value entered: ",value);
               //------------------------------------------------------------------------------------------------------
               //Your comment: Send the value to Slider.
               //------------------------------------------------------------------------------------------------------
               break;





case Settings_example_1___Roll_the_value:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the slider's handle is moved?
               //------------------------------------------------------------------------------------------------------
               //Min value:  0  |   Max value:  100  |   V_step:  1  |   Default value:  75  |  Digits: Integer value
               //------------------------------------------------------------------------------------------------------
               w6_d_p5_S_EDIT_Spin_the_value((double)value);
               
               Alert("H_SLIDER Roll_the_value    value entered: ",value);
               //------------------------------------------------------------------------------------------------------
               //Your comment: Send the value to Spin edit.
               //------------------------------------------------------------------------------------------------------
               break;

结果:滑块和输入字段同时相互控制。

//---------------------------------------------------------------------------------------------------


明天我将发布该主题的第二部分,并添加其他元素。

 

这东西太棒了!如果有时间,我打算更详细地了解一下这个主题。我以为我的工作已经超越了 mt4 图形用户界面的极限,但你的工作却更上一层楼。


 
Dennis Jorgenson #:

这是一些很好的材料!我打算有空时再详细探讨这个话题。我以为我的工作已经超越了 mt4 图形用户界面的极限,但你的工作却更上一层楼。


非常感谢你的赞誉!

 

11.不同类型元素的绑定参数

继续本主题。

第二部分

//--------------------------------------------------------------------------------------------------------------------------------

让我们看看能否将所示绑定方法应用于其他元素。例如,复选框。

1.让我们锁定顶部的复选框,并解锁其下方的复选框:


要做到这一点

1.在 API 文件中找到"设置选项"复选框

2.2. 为"设置另一个选项"复选框编写一个函数调用,使其锁定/解锁。

//===========================================================================================================================
//WINDOW          :---: Settings example 1 | #: 6 | PFX: w_6
//                |   |
//GET/SET         :---: int w_6_Settings_example_1(int value = get_i, int Property = 0)
//----------------|   |------------------------------------------------------------------------------------------------------
//ELEMENT         :---: TYPE: CHECKBOX | NAME: Set an option | PAR_TYPE: int | INIT STATE: OFF | PFX: w6
//                |   |------------------------------------------------------------------------------------------------------
//LOCATION        :---: Window's Main Frame 
//----------------|   |------------------------------------------------------------------------------------------------------
//G/S PROPERTIES  :---: PFX: p7_ | PROPS: NONE
//                |   |------------------------------------------------------------------------------------------------------
//G/S ACTIONS     :---: p7_ON | p7_OFF | p7_LOCK_ON | p7_LOCK_OFF | p7_GET_STATE |
//----------------|   |------------------------------------------------------------------------------------------------------
//                |   |
//GET/SET CALL    :---: int w6_i_p7_CHECKBOX_Set_an_option(int value = none, int Property = 0)
//---------------------------------------------------------------------------------------------------------------------------
  
case Settings_example_1___Set_an_option:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the checkbox is checked or unchecked?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                //1. Lock the "Set another option" checkbox in the state ON.
                case checked:    w6_i_p7_CHECKBOX_Set_another_option(p7_LOCK_ON);   break;
  
                //2. Unlock "Set another option" checkbox in the state ON.
                case unchecked:  w6_i_p7_CHECKBOX_Set_another_option(p7_ON);        break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment: 
               //------------------------------------------------------------------------------------------------------
               break;

结果:复选框按预期锁定和解锁:

//--------------------------------------------------------------------------------------------------------------------------------


2.现在,让复选框锁定并解锁其下方的两个复选框:

case Settings_example_1___Set_an_option:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the checkbox is checked or unchecked? 
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                //Lock both checkboxes----
                case checked:    w6_i_p7_CHECKBOX_Set_another_option(p7_LOCK_ON);  
                                 w6_i_p7_CHECKBOX_And_another_option(p7_LOCK_ON);
                break;

                //Unlock both checkboxes---
                case unchecked:  w6_i_p7_CHECKBOX_Set_another_option(p7_ON); 
                                 w6_i_p7_CHECKBOX_And_another_option(p7_ON);  
                break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;

结果:复选框锁定并解锁了下面的两个复选框:


这就是动态效果:

//--------------------------------------------------------------------------------------------------------------------------------


3.现在我们来解决下图所示的问题: 复选框应该锁定和解锁其对面的下拉列表


要做到这一点:

  • 我们需要在 API 文件中找到这些复选框。
  • 为目标项目编写锁定/解锁字符串。

case Settings_example_1___Set_another_option:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the checkbox is checked or unchecked?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                //Locking the element---
                case checked:    w6_s_p6_D_LIST_D_LIST_1(p6_LOCK);   break;
                
                //Unlocking the element---
                case unchecked:  w6_s_p6_D_LIST_D_LIST_1(p6_UNLOCK); break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_1___And_another_option:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the checkbox is checked or unchecked?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                //Locking the element---
                case checked:    w6_s_p6_C_LIST_C_LIST_1(p6_LOCK);   break;
                
                //Unlocking the element---
                case unchecked:  w6_s_p6_C_LIST_C_LIST_1(p6_UNLOCK); break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;

结果:复选框锁定下拉列表,并与主复选框一起锁定自己

//--------------------------------------------------------------------------------------------------------------------------------


4.我们继续下一个任务下拉列表应将用户选择的值转换到另一个窗口的字段中。


为此

  • 必须在 API 文件中找到下拉列表。
  • 在用户选择事件中将值传递给另一个窗口 文本字段
case Settings_example_1___D_LIST_1:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when an option selected?
               //------------------------------------------------------------------------------------------------------
               if(selected_option == "L_ITEM  1"){}
               if(selected_option == "L_ITEM  2"){}
               if(selected_option == "L_ITEM  3"){}
               if(selected_option == "L_ITEM  4"){}
               if(selected_option == "L_ITEM  5"){}
               if(selected_option == "L_ITEM  6"){}
               if(selected_option == "L_ITEM  7"){}
               if(selected_option == "L_ITEM  8"){}
               if(selected_option == "L_ITEM  9"){}
               if(selected_option == "L_ITEM  10"){}
               if(selected_option == "L_ITEM  11"){}
               if(selected_option == "L_ITEM  12"){}
               if(selected_option == "L_ITEM  13"){}
               if(selected_option == "L_ITEM  14"){}
               if(selected_option == "L_ITEM  16"){}
               if(selected_option == "L_ITEM  17"){}
               if(selected_option == "L_ITEM  18"){}
               if(selected_option == "L_ITEM  19"){}
               if(selected_option == "L_ITEM  20"){}
  
               //-----------------------------------
               //Send user's choice to textbox "Comment 1" in another window.
               w7_s_p4_EDIT_Comment_1(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_1___C_LIST_1:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when an option selected?
               //------------------------------------------------------------------------------------------------------
               if(selected_option == "Times_New_Roman"){}
               if(selected_option == "Arial"){}
               if(selected_option == "Tahoma"){}
               if(selected_option == "Dali"){}
               if(selected_option == "BatangChe"){}
               if(selected_option == "Consolas"){}
               if(selected_option == "Courier"){}
               if(selected_option == "Courier_New"){}
               if(selected_option == "DFKai_SB"){}
               if(selected_option == "DotumChe"){}
               if(selected_option == "FangSong"){}
               if(selected_option == "Fixedsys"){}
               if(selected_option == "GulimChe"){}
               if(selected_option == "GungsuhChe"){}
               if(selected_option == "KaiTi"){}
  

               //Send user's choice to textbox "Comment 2" in another window.
               w7_s_p4_EDIT_Comment_2(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;


*结果:两个下拉列表都成功地将其值发送到对面窗口的输入框中

//--------------------------------------------------------------------------------------------------------------------------------


5.下面的任务如图所示: 您需要切换的单选按钮将其名称发送到对面的输入字段。



为此

  • 让我们在 API 文件中找到这些单选按钮的位置。
  • 为所需输入字段编写一个函数调用,并在用户选择事件中向其发送单选按钮的名称。

*重要提示:由于 KIB 代码中使用了 SWITCH 操作符,因此单选按钮可以切换。因此,所有单选按钮都有一个共同参数,并且在 API 文件中的情况相同。

//===========================================================================================================================
//WINDOW          :---: Settings example 2 | #: 7 | PFX: w_7
//                |   |
//GET/SET         :---: int w_7_Settings_example_2(int value = get_i, int Property = 0)
//----------------|   |------------------------------------------------------------------------------------------------------
//GROUP           :---: TYPE: R_BUTTONS | NAME: Some options group | PAR_TYPE: string | INIT OPTION: Choose option 1 | PFX: w7
//                |   |------------------------------------------------------------------------------------------------------
//LOCATION        :---: Window's Main Frame 
//----------------|   |------------------------------------------------------------------------------------------------------
//G/S PROPERTIES  :---: PFX: p7_ | PROPS: NONE
//                |   |------------------------------------------------------------------------------------------------------
//G/S ACTIONS     :---: p7_ON | p7_OFF | p7_LOCK_ON | p7_LOCK_OFF | p7_GET_STATE |
//----------------|   |------------------------------------------------------------------------------------------------------
//                |   |
//GET/SET CALL    :---: string w7_s_p7_R_BUTTON_Some_options_group(string value = get_s, int Property = 0)
//---------------------------------------------------------------------------------------------------------------------------
  
case Settings_example_2___Some_options_group:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when an option selected?
               //------------------------------------------------------------------------------------------------------
               if(selected_option == "Choose option 1"){}
               if(selected_option == "Choose option 2"){}
               if(selected_option == "Choose option 3"){}
              
              
               //We send user's choise into the textbox "Comment 3".
               w7_s_p4_EDIT_Comment_3(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;

结果:切换按钮会导致输入框中的文本发生变化*该选项 存在一个小的技术问题。将在下一版本中修复

第二部分已经完成。

在第三部分中,我们将使用表格。

 


参数绑定主题的最后一部分。

让我们把元素参数值传递给表格单元格。

模式:



解决方案:

  • 在 API 文件中找到所需的元素。
  • 在每个元素中将值传递给指定的表格单元格。

case Settings_example_1___D_LIST_1:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when an option selected?
               //------------------------------------------------------------------------------------------------------
               if(selected_option == "L_ITEM  1"){}
               if(selected_option == "L_ITEM  2"){}
               if(selected_option == "L_ITEM  3"){}
               if(selected_option == "L_ITEM  4"){}
               if(selected_option == "L_ITEM  5"){}
               if(selected_option == "L_ITEM  6"){}
               if(selected_option == "L_ITEM  7"){}
               if(selected_option == "L_ITEM  8"){}
               if(selected_option == "L_ITEM  9"){}
               if(selected_option == "L_ITEM  10"){}
               if(selected_option == "L_ITEM  11"){}
               if(selected_option == "L_ITEM  12"){}
               if(selected_option == "L_ITEM  13"){}
               if(selected_option == "L_ITEM  14"){}
               if(selected_option == "L_ITEM  16"){}
               if(selected_option == "L_ITEM  17"){}
               if(selected_option == "L_ITEM  18"){}
               if(selected_option == "L_ITEM  19"){}
               if(selected_option == "L_ITEM  20"){}
  
               //-----------------------------------
               //Send user's choise to the cell "CELL_Account_name__Value"
               w8_s_p4_CELL_Account_name__Value(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_1___C_LIST_1:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when an option selected?
               //------------------------------------------------------------------------------------------------------
               if(selected_option == "Times_New_Roman"){}
               if(selected_option == "Arial"){}
               if(selected_option == "Tahoma"){}
               if(selected_option == "Dali"){}
               if(selected_option == "BatangChe"){}
               if(selected_option == "Consolas"){}
               if(selected_option == "Courier"){}
               if(selected_option == "Courier_New"){}
               if(selected_option == "DFKai_SB"){}
               if(selected_option == "DotumChe"){}
               if(selected_option == "FangSong"){}
               if(selected_option == "Fixedsys"){}
               if(selected_option == "GulimChe"){}
               if(selected_option == "GungsuhChe"){}
               if(selected_option == "KaiTi"){}
  

               //Send user's choice to textbox "Comment 2" in another window.
               w8_s_p4_CELL_Leverage__Value(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_1___Roll_the_value:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the slider's handle is moved?
               //------------------------------------------------------------------------------------------------------
               //Min value:  0  |   Max value:  100  |   V_step:  1  |   Default value:  75  |  Digits: Integer value
               //------------------------------------------------------------------------------------------------------

               //Sending the slider's value into the table cell.
               w8_s_p4_CELL_Account_balance__Value(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_2___Comment_1:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the text is entered?
               //------------------------------------------------------------------------------------------------------
               
               //Sending textbox's text into the cell
               w8_s_p4_CELL_Account_number__Value(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_2___Comment_2:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the text is entered?
               //------------------------------------------------------------------------------------------------------
               
               //Sending textbox's text into the cell
               w8_s_p4_CELL_Account_server__Value(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_2___Comment_3:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the text is entered?
               //------------------------------------------------------------------------------------------------------
      
               //Sending textbox's text into the cell
               w8_s_p4_CELL_Account_currency__Value(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_2___C_LIST_1:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when an option selected?
               //------------------------------------------------------------------------------------------------------
               if(selected_option == "Times_New_Roman"){}
               if(selected_option == "Arial"){}
               if(selected_option == "Tahoma"){}
               if(selected_option == "Dali"){}
               if(selected_option == "BatangChe"){}
               if(selected_option == "Consolas"){}
               if(selected_option == "Courier"){}
               if(selected_option == "Courier_New"){}
               if(selected_option == "DFKai_SB"){}
               if(selected_option == "DotumChe"){}
               if(selected_option == "FangSong"){}
               if(selected_option == "Fixedsys"){}
               if(selected_option == "GulimChe"){}
               if(selected_option == "GungsuhChe"){}
               if(selected_option == "KaiTi"){}
  

               //Sending C_LIST value into the cell.
               w8_s_p4_CELL_Account_profit__Value(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_2___D_LIST_1:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when an option selected?
               //------------------------------------------------------------------------------------------------------
               if(selected_option == "L_ITEM  1"){}
               if(selected_option == "L_ITEM  2"){}
               if(selected_option == "L_ITEM  3"){}
               if(selected_option == "L_ITEM  4"){}
               if(selected_option == "L_ITEM  5"){}
               if(selected_option == "L_ITEM  6"){}
               if(selected_option == "L_ITEM  7"){}
               if(selected_option == "L_ITEM  8"){}
               if(selected_option == "L_ITEM  9"){}
               if(selected_option == "L_ITEM  10"){}
               if(selected_option == "L_ITEM  11"){}
               if(selected_option == "L_ITEM  12"){}
               if(selected_option == "L_ITEM  13"){}
               if(selected_option == "L_ITEM  14"){}
               if(selected_option == "L_ITEM  16"){}
               if(selected_option == "L_ITEM  17"){}
               if(selected_option == "L_ITEM  18"){}
               if(selected_option == "L_ITEM  19"){}
               if(selected_option == "L_ITEM  20"){}
  

               //Sending the D_LIST value into the cell.
               w8_s_p4_CELL_Account_equity__Value(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;

结果:值被安全地放入选定的表格单元格中


从上述示例中可以看出,我们已经开发出一种简单方便的解决方案。希望对大家有用。


链接元素参数的话题到此结束。

 

下列议题尚待解决:

12.以编程方式获取/设置滑块 和按钮字段的值边界(_V_MIN、_V_MAX、_V_STEP、_DIGITS)。

13.查询元素的状态(_GET_STATE)。

14.将文本和边框颜色与间隔值边界联系起来

15.API 文件中的方向


添加主题

16.实现消息和警告窗口外观的程序逻辑

 
让我们继续新的一页。
 

12.以编程方式获取/设置滑块 带按钮字段的值边界_V_MIN、_V_MAX、_V_STEP、_DIGITS) 1.

打开一个窗口,其中包含上述参数的元素:

int _OnInit()
  {
   //------------------------------------------------
   //Open the window "Settings example 1".
   //------------------------------------------------
   w_6_Settings_example_1();
   //------------------------------------------------


2.写入_V_MIN、_V_MAX、_V_STEP、_DIGITS 的值并输出到日志中:

   //------------------------------------------------
   //Get parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP, _DIGITS
   //------------------------------------------------
   int Min_value = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_V_MIN);
   int Max_value = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_V_MAX);
   int Step      = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_V_STEP);
   int digits    = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_DIGITS);
   //------------------------------------------------
   //Print the results:
   //------------------------------------------------
   Print("Min_value:  ",Min_value,"  Max_value:  ",Max_value,"  Step:  ",Step,"  digits:  ",digits);
   //------------------------------------------------

结果:滑块参数属性的值被记录下来。


//---------------------------------------------------------------------------------------------------------------------------------------


3.让我们重复带按钮字段的操作。与滑块不同,该字段有其他数字边界,其值类型为

   //------------------------------------------------
   //Get parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP, _DIGITS
   //------------------------------------------------
   double _Min_value  =  w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_V_MIN);
   double _Max_value  =  w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_V_MAX);
   double _Step       =  w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_V_STEP);
   double _digits     =  w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_DIGITS);
   //------------------------------------------------
   Print("Min_value:  ",_Min_value,"  Max_value:  ",_Max_value,"  Step:  ",_Step,"  digits:  ",_digits);
   //------------------------------------------------ 

结果:带按钮字段的参数属性值将显示在日志中。


//---------------------------------------------------------------------------------------------------------------------------------------


4.设置滑块范围的其他边界(首次测试,结果未知)。

   //------------------------------------------------
   //Set parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP.
   //------------------------------------------------
   Min_value = -100;
   Max_value = 100;
   Step      = 1;
   //-----------------
   w6_i_p3_H_SLIDER_Roll_the_value(Min_value, p3_V_MIN);
   w6_i_p3_H_SLIDER_Roll_the_value(Max_value, p3_V_MAX);
   w6_i_p3_H_SLIDER_Roll_the_value(Step,      p3_V_STEP);
   //------------------------------------------------

结果:*发现了负数范围的问题(在下一版本中修复)。




让我们用正数范围边界进行检查:

   //------------------------------------------------
   //Set parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP.
   //------------------------------------------------
   Min_value = 0;
   Max_value = 1000;
   Step      = 1;
   //-----------------
   w6_i_p3_H_SLIDER_Roll_the_value(Min_value, p3_V_MIN);
   w6_i_p3_H_SLIDER_Roll_the_value(Max_value, p3_V_MAX);
   w6_i_p3_H_SLIDER_Roll_the_value(Step,      p3_V_STEP);
   //------------------------------------------------


结果:成功更改了范围界限


要点: 使用滑块的功能可以更改滑块的范围。

**重要:不能将参数值类型从 int 变为 double,反之亦然

//-------------------------------------------------------------------------------------------------


让我们对输入栏进行类似的实验:

   //------------------------------------------------
   //Set NEW parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP, _DIGITS
   //------------------------------------------------
   double _Min_value  = -100.0;
   double _Max_value  =  100.0;
   double _Step       =  2.5;
   //-----------------
   //Set another default value---
   w6_d_p5_S_EDIT_Spin_the_value(50.5);
   //-----------------
   w6_d_p5_S_EDIT_Spin_the_value(_Min_value,p5_V_MIN);
   w6_d_p5_S_EDIT_Spin_the_value(_Max_value,p5_V_MAX);
   w6_d_p5_S_EDIT_Spin_the_value(_Step     ,p5_V_STEP);
   //------------------------------------------------

结果:如愿以偿。带按钮的字段接受指定的范围和步长。如果超出范围,则会向日志报告错误

//--------------------------------------------------------------------------------------------------


5.最后,为带按钮的字段设置 value_DIGITS(由于滑块的参数类型为 int,因此无法使用):

  • 我们将步进值设置为句号后的四位数字。
  • digits 变量设置为 4(小数点后四位)。

       //------------------------------------------------
       //Set parameter properties, such as: 
       //_V_MIN, _V_MAX, _V_STEP, _DIGITS
       //------------------------------------------------
       double _Min_value  = -100.0;
       double _Max_value  =  100.0;
       double _Step       =  2.5567;
              digits      =  4;
       //-----------------
       //Set another default value---
       w6_d_p5_S_EDIT_Spin_the_value(50.5);
       //-----------------
       w6_d_p5_S_EDIT_Spin_the_value(_Min_value,p5_V_MIN);
       w6_d_p5_S_EDIT_Spin_the_value(_Max_value,p5_V_MAX);
       w6_d_p5_S_EDIT_Spin_the_value(_Step     ,p5_V_STEP);
     
       //Set the new number of digits:
       w6_d_p5_S_EDIT_Spin_the_value(digits    ,p5_DIGITS);
       //------------------------------------------------


    结果:

    • 起初,小数点后有三位数(软件更改前的原始数字)。


    • 然后,软件调用将精度提高到四位数:


    • 接着是 7 位数:
    //Setting 7 digits after the decimal point:
    
    w6_d_p5_S_EDIT_Spin_the_value(7,p5_DIGITS);



    结果:

    • 可以通过编程重置按钮字段和滑块的原始数字范围边界。
    • 可以通过设置不同的小数位数,以编程方式改变双数值的初始精度。
    • 滑块在计算负数范围内的数值时存在问题(将得到修复)。
    • 元素参数的原始类型无法重置

    本主题到此结束。

    Графические интерфейсы VI: Элементы "Слайдер" и "Двухсторонний слайдер" (Глава 2)
    Графические интерфейсы VI: Элементы "Слайдер" и "Двухсторонний слайдер" (Глава 2)
    • www.mql5.com
    В предыдущей статье разрабатываемая библиотека была пополнена сразу четырьмя довольно часто используемыми в графических интерфейсах элементами управления: «чекбокс», «поле ввода», «поле ввода с чекбоксом» и «комбобокс с чекбоксом». Вторая глава шестой части серии будет посвящена таким элементам управления, как слайдер и двухсторонний слайдер.