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

 
让我们逐点分析一下这个话题:

  • 根据元素的 "相关性 "将属性分成列表的概念已经成功实现。
  • 实施后,为所有类型的元素 创建了 7 个独特的属性列表。
  • 每个列表都有一个特殊的标识符。这是前缀 p(属性的缩写)和一个序列号。
  • 因此,在 intellisense 中可以通过七个前缀找到每个列表:p1、p2、p3、p4、p5、p6 和 p7。
  • 为了方便和避免混淆,属性列表的前缀被印在封装函数的名称中:

  • 输入前缀后,就会出现单个 属性列表。我特意强调了 "单个 " 一词,因为这一点至关重要。
  • 返回和设置属性值 封装函数只接受写有前缀的属性名称:


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


  • 复选框只能使用列表中的这些属性不过,列表本身不仅属于复选框,也属于其他一些元素

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


  • C_LIST 元素的列表中还没有特殊属性。只有包装器可以执行的操作(除了返回 V_LAST - 最后一个值)。

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


  • 与 C_LIST 不同,滑块 有大量可用属性和操作列表。

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


  • S_EDIT 元素具有多种可用属性和操作:


强调是添加的:

每个封装函数只接受名称中带有前缀的属性。


这就是使用列表的实际效果(在末尾加上括号,因为 intellisense 在封装函数的括号内不起作用):

gif 稍微加快了速度。


通过 gif 中显示的调用,封装函数返回了指定属性的值。

在调用之前,必须声明一个变量来存储属性值或函数执行的结果。 有关这方面的 更多信息 请参阅以下主题

 

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


1.元素包装函数名称:

我们来看看 EDIT文本输入框 元素函数示例:w7_s_p4_EDIT_Comment_1();

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

  • w7- 窗口编号 7

//-------------------------------------------------------------
  • s- 此封装函数的返回值类型字符串.

//-------------------------------------------------------------
  • p4- 该元素类型属性列表的前缀.

/ / - ------------------------------------------------------------
  • EDIT- 元素类型.

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

  • Comment_1- 特定元素的 名称

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


2.窗口封装函数的名称:

我们再来看一个函数的例子:w_15_Processing_the_data();

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

  • w_15- 窗口编号 15
请注意,数字并不是紧跟在w 后面,而是通过破折号_ 出现的 这一点很重要。

) // - ------------------------------------------------------------
  • Processing_the_data - 此窗口的名称 (如果是警告窗口,名称可能与窗口标题中的文字 Caption 不一致

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

需要注意的是,窗口函数还没有用于打开属性列表的前缀。该功能一定会出现。届时将生成一个要返回/设置的窗口属性特殊列表,并分配一个前缀。此外,窗口函数还不包含返回类型字母。

目前,该函数只能打开或关闭窗口。


这些缺陷将在下一个版本中修复。


 
建议把这些教程信息私下单独汇总一次,否则以后将淹没在评论里
 
hini #:
建议将这些培训信息私下单独汇总一次,否则将来会淹没在评论中。
当然,我们会对这些信息进行总结和排序。
 
目前,说明、解释和评论的顺序刚刚形成。未来文件的内容将在开发和与用户交流的过程中不断积累。因此,背景信息是分部分介绍的。接收反馈是必要的,也是提高技术解决方案质量的重要阶段。在公众的积极参与下,软件将经历一个形成阶段,并将实现全部功能。其结果将是一个带有详细文档的完整方案。
 

6.参数或属性的值返回到所需类型的变量中:


元素参数的类型(intdouble字符串)决定了元素函数的类型。

众所周知,元素函数返回的参数值有三种类型:intdouble字符串

不过,函数也会返回属性值...

当参数值的类型与属性的类型不一致,就会出现这种情况这种被迫带来的不便是函数通用性的代价

用户的任务是 自己将接收到的值转换为所需的类型。.


我要强调的是 所有元素属性的主要类型都是 int。


让我们仔细看看问答示例:

  • - 问:如果函数类型是字符串, 那么函数将如何返回int 类型属性的值?
  • - 答函数将返回 字符串 类型的int
  • - 问:如果函数类型是double,函数将如何返回int 的值
  • - 答 函数 将返回 double 类型的int
  • - 问: 如果函数类型是int, 函数将如何返回double 值?
  • - 答:不存在double 类型元素的属性。元素参数 的属性可以是double 类型。在这种情况下,函数本身将是double 类型。


参数值的类型决定了元素函数的类型

没有double 类型的元素属性 只有int 类型。但有一些参数属性接受double、 string int 类型。例如,V_CURRENT、V_LAST、V_MAX、V_MIN、V_STEP 可以是intdouble。但如果参数的属性或参数本身不是 int 函数就不能变为 int

如果滑块函数返回int 类型,则意味着在创建元素阶段,用户自己为其参数或属性指定了整数,例如,将滑块范围或带按钮的输入字段置于整数值内。



结论: 用户的任务是将接收到的值转换为所需的类型

让我们举几个实际例子:

1.

   //------------------------------------------------
   //Текстовое поле ввода EDIT. Тип функции - string.
   //Получение и установка цвета текста и основания:
   //------------------------------------------------
   
   //1. Устанавливаем любой текст в пустое поле ввода:
   w7_s_p4_EDIT_Comment_1("Some random text");
   //------------------------------------------------

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

2.

   //------------------------------------------------
   //2. Получаем цвет основания поля ввода:
   uint Comment_1_base_color =  (uint)w7_s_p4_EDIT_Comment_1(get_s,p4_COLOR_base); 
   //------------------------------------------------
   //Выводим результат в журнал:
   Print("Comment_1_base_color  ",Comment_1_base_color);
   //------------------------------------------------

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

3.

   //------------------------------------------------
   //3. Назначаем основанию новый цвет:
   w7_s_p4_EDIT_Comment_1((uint)clrWheat,p4_COLOR_base); 
   //------------------------------------------------

查看结果:


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

4.

   //------------------------------------------------
   //4. Получаем цвет текста поля ввода: 
   uint Comment_1_text_color =  (uint)w7_s_p4_EDIT_Comment_1(get_s,p4_COLOR_text); 
   //------------------------------------------------
   //Выводим результат в журнал:
   Print("Comment_1_text_color  ",Comment_1_text_color); 
   //------------------------------------------------


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

5.

   //------------------------------------------------
   //5. Устанавливаем другой цвет тексту:
   w7_s_p4_EDIT_Comment_1((uint)clrRed,p4_COLOR_text); 
   //------------------------------------------------

查看结果:




接下来,让我们测试获取和设置其他元素和参数属性。我们还可以尝试使用 double 类型。

Документация по MQL5: Основы языка / Операторы / Оператор возврата return
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
  • www.mql5.com
Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Результат вычисления выражения возвращается...
 

我已经跟着代码测试了一下,发现一个意外的事情,当随机字符串长度太长时,不会自动隐藏

w7_s_p4_EDIT_Comment_1("Some random text AAAAAAAA");


 
这些都是小问题,请留到后期看情况,若有时间就查看一下,没有时间就暂时不要解决了
 

我发现一个对我而言致命的问题,那就是输入我所使用的文字,在GUI上显示的方向是水平的……旋转90度,正常是:

你好


 
hini #:

我按照代码进行了测试,发现了一个意想不到的问题,即当随机字符串长度过长时不会自动发现


好的,谢谢你的留言。我会看看的。

一般来说,默认情况下文本总是被缩短的。以前从未出现过这种情况。可能是因为添加了新功能。