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

 

理论上可以这样做:

w7_s_p4_EDIT_Comment_2(w6_d_p5_S_EDIT_Spin_the_value());

编译器本身会将 double 转换为字符串,但我不建议这样做。

 
Реter Konow #:

我不太理解这个问题,所以我的回答可能会跑题。

您可以这样做:


double 函数在值返回步骤中通过强制转换返回字符串类型的变量。
w7_s_p4_EDIT_Comment_2函数里面再进行转换类型
double Spin_edit_value = 22.5;

w7_s_p4_EDIT_Comment_2(Spin_edit_value);
 
Реter Konow #:

理论上可以这样做:

编译器本身会将 double 转换为字符串,但我不建议这样做。

w7_s_p4_EDIT_Comment_2函数不能生成对应的接收double类型的重载版本吗

 

继续设置属性以及在元素间返回和转发值的话题。


我们研究了几种方案:

1.在文本输入框中设置文本。

w7_s_p4_EDIT_Comment_1("Some random text");

2.为滑块指定一个新值。

w6_i_p3_H_SLIDER_Roll_the_value(33);

3.为带按钮的输入框选择一个任意数字。

w6_d_p5_S_EDIT_Spin_the_value(423.11);

4.向账户信息 表中的单元格发送多个文本字符串。

w8_s_p4_CELL_Account_name__Value("MyRealAccount");  

w8_s_p4_CELL_Account_number__Value("A001234647843B1");

w8_s_p4_CELL_Account_server__Value("MyServer");

w8_s_p4_CELL_Account_currency__Value("US Dollar");

w8_s_p4_CELL_Leverage__Value("1:1");

w8_s_p4_CELL_Account_balance__Value("1234567.23 $");


5.最后,我们返回 S_EDIT 元素的新值,并将其发送到两个不同的窗口:账户信息 表中的单元格和设置窗口示例 2 中的文本输入框。

 double Spin_edit_value = w6_d_p5_S_EDIT_Spin_the_value();//Делаем возврат значения параметра (тип double).
w8_s_p4_CELL_Account_profit__Value((string)Spin_edit_value);//При пересылке значение double приводим к типу string. Функция ячейки имеет тип string.
w7_s_p4_EDIT_Comment_2((string)Spin_edit_value);

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


要完成这个主题并进入下一个主题,我们需要做几件事:

1. 更改滑动条的颜色。

2.更改 S_EDIT 底座和文本的颜色。

3.更改按钮在按下和未按下状态下的颜色。

4.检查在计时器事件中向元素发送值的情况

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


更改滑动条的颜色:

   //To get slider's bar color:
   uint Sliders_bar_color = (uint)w6_i_p3_H_SLIDER_Roll_the_value(get_i, p3_COLOR_bar);
   
   //Print the returned value:
   Print("Sliders_bar_color =  ",Sliders_bar_color);

结果:



为滑动条指定不同的颜色:

   //To set slider's bar color:
   w6_i_p3_H_SLIDER_Roll_the_value((uint)clrRed, p3_COLOR_bar);


结果:

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


2更改文本和 S_EDIT 元素底座的颜色:

获取带按钮的输入框底色的原始颜色:

   //To get spin edit's base color:
   uint Spin_edit_base_color = (uint)w6_d_p5_S_EDIT_Spin_the_value(get_d, p5_COLOR_base);

将其输出到日志中:

   //Print the returned value:
   Print("Spin_edit_base_color = ",Spin_edit_base_color);


为字段底色指定不同的颜色:

   //To set spin edit's base color:
   w6_d_p5_S_EDIT_Spin_the_value((uint)clrLightGreen, p5_COLOR_base);

结果:


设置 S_EDIT 字段的文本颜色(使用了属性前缀 p4 而不是 p5,因为我忘了为S_EDIT 添加文本颜色属性, 这个 错误 将在下一个版本中修复)。

   //To set spin edit's text color:
   w6_d_p5_S_EDIT_Spin_the_value((uint)clrBrown, p4_COLOR_text);  


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


3.更改按钮在按下和未按下状态下的颜色:

更改中立状态下按钮的颜色:

w6_i_p1_BUTTON_Start((uint)C'255,166,0',p1_N_COLOR_base);


激活状态按钮 设置不同的颜色:

w6_i_p1_BUTTON_Start((uint)C'166,255,0',p1_A_COLOR_base);


您也可以更改中性和按下状态下按钮的文字颜色,但在小字体上并不明显。因此,我们选择不同的窗口:

   //Set text color for button's neutral state:

   //Button 1:
   w14_i_p1_BUTTON_BUY_OFF((uint)C'240,70,10',p1_N_COLOR_text);

   //Button 2:
   w14_i_p1_BUTTON_SELL_OFF((uint)C'240,70,10',p1_N_COLOR_text); 

Result:


   //Set text color for button's active state:
   
  //Button 1
   w14_i_p1_BUTTON_BUY_OFF((uint)C'105,240,50',p1_A_COLOR_text);

  //Button 2
   w14_i_p1_BUTTON_SELL_OFF((uint)C'105,240,50',p1_A_COLOR_text);

结果:


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


4.检查向计时器事件中的元素发送值:

void _OnTimer()
  {
   string Microseconds = (string)GetMicrosecondCount();
     
   //Send Microseconds to each cell-----------------
   w8_s_p4_CELL_Account_name__Value(Microseconds);
   w8_s_p4_CELL_Account_number__Value(Microseconds);
   w8_s_p4_CELL_Account_server__Value(Microseconds);
   w8_s_p4_CELL_Account_currency__Value(Microseconds);
   w8_s_p4_CELL_Leverage__Value(Microseconds);
   w8_s_p4_CELL_Account_balance__Value(Microseconds);
   w8_s_p4_CELL_Account_profit__Value(Microseconds);
   w8_s_p4_CELL_Account_equity__Value(Microseconds);
   w8_s_p4_CELL_Account_free_margin__Value(Microseconds);
   w8_s_p4_CELL_Account_margin__Value(Microseconds);
   w8_s_p4_CELL_Account_stop_out_level__Value(Microseconds);

Result:


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

至此,本主题结束。


接下来,我们进入主题:

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

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

 
hini #:

w7_s_p4_EDIT_Comment_2 函数内部,然后转换类型

可以。但会有一个额外的警告,因为这是一个隐式类型转换。从技术上讲,你可以只发送一个数字。不需要变量。我让大家自行决定。

 
hini #:

w7_s_p4_EDIT_Comment_2 函数内部,然后将类型转换为

w7_s_p4_EDIT_Comment_2 函数内部 什么都没有。它只是一个调用中心函数的包装器。包装函数只能返回自身类型的值。



hini# 难道 w7_s_p4_EDIT_Comment_2 函数不能生成一个相应的重载版本来接收 double 类型吗?

不能,因为它是一个封装器。没有必要把它复杂化。所有工作都由中心函数完成。
 
Реter Konow #:

w7_s_p4_EDIT_Comment_2 函数内部 什么都没有。它只是一个调用中心函数的包装器。包装函数只能返回自身类型的值。


不能,因为它是一个封装器。没有必要把它复杂化。所有工作都由中心函数完成。

好吧

 

今天,让我们来看看四个主题:

9.返回上一个_V_LAST

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

11.11. 同步参数变化:如输入框与按钮和滑块。目标是当第一个值发生变化时,第二个值也相应发生变化。首先在一个窗口中建立通信,然后在窗口之间建立通信。

12.以编程方式重设滑块和带按钮输入框的范围边界。

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

到目前为止,我们已经介绍了以下内容:

1. 在 intellisense 列表中确定方向并选择所需窗口的功能。

2.软件打开和关闭窗口。

3. 在 intellisense 列表中确定方向并在所需窗口中选择所需元素。

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

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

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

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

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

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

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

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

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

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

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

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

 
让我们从新的一页开始。
 

9.返回 _V_LAST 之前的值

所有参数的前一个值都会自动保存。要获取它,需要调用元素函数并传递_V_LAST 标识符

让我们通过一个实际例子来了解如何操作

打开所需的窗口:

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

   w_7_Settings_example_2();
   //------------------------------------------------



2.2. 向上部输入框 发送一个值(字符串):

   //------------------------------------------------
   //Set up the first string in the textbox:

   w7_s_p4_EDIT_Comment_1("1, 2, 3, 4, 5");
   //------------------------------------------------



3. 现在向同一字段发送另一个字符串:

   //------------------------------------------------
   //Right after, reset it by the new string:

   w7_s_p4_EDIT_Comment_1("A, B, C, D, E");
   //------------------------------------------------



4.我们会得到前一个字符串的返回值:

   //------------------------------------------------
   //Get back the first value:

   string The_first_value = w7_s_p4_EDIT_Comment_1(get_s,p4_V_LAST);
   //------------------------------------------------


5.并将其发送到下面的字段

   //------------------------------------------------
   //And send it into the textbox below:

   w7_s_p4_EDIT_Comment_2(The_first_value);
   //------------------------------------------------


6.让我们再次重写上面的字段行:

   //------------------------------------------------
   //Reset the value again:

   w7_s_p4_EDIT_Comment_1("A1, B2, C3, D4, E5");
   //------------------------------------------------


7.将上一行字符串发送到下一行字段:

   //------------------------------------------------
   //And get the the previous value back:

   string The_second_value = w7_s_p4_EDIT_Comment_1(get_s,p4_V_LAST);
   //------------------------------------------------
   
   //------------------------------------------------
   //Send it into the third textbox:

   w7_s_p4_EDIT_Comment_3(The_second_value);
   //------------------------------------------------



结果:

  • 顶部字段是当前字符串。
  • 中间字段 - 原始字符串。
  • 下方字段为第二个字符串。

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

同样的方法适用于所有情况。

使用_V_LAST 标识符,您可以获得任何元素的最后值(如果标识符在单个属性列表中有所规定)。




接下来,考虑设置开/关 状态和锁定元素。