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

 
//--------------------------
//FIRST GROUP
//--------------------------
GROUP, "Group 1",

__, CHECKBOX, "Checkbox 100",  

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 10,
//--------------------------
i, CHECKBOXES, W, 120,  END,
//--------------------------
//--------------------------------------------------------------
//1. WRITE THE NAME OF THE CHECKBOX THAT WILL BLOCK THE OTHERS:
//2. WRITE KEYWORD "BLOCKS".
//3. WRITE THE NAMES OF THE ELEMENTS (OR GROUPS) IT WILL BLOCK.
//4. PUT "END" IN THE END.
//5. OR, WRITE THE NAME OF THEIR GROUP.
//--------------------------------------------------------------
"Checkbox 100", BLOCKS, "Group 2", END,
//--------------------------------------------------------------

//--------------------------
//SECOND GROUP
//--------------------------
GROUP, "Group 2",


__, H_SLIDER, "H_Slider 1", W, 120,       S_EDIT, "Textbox 1",         W, 120, 

__, C_LIST,   "Combobox 1", W, 120,       D_LIST, "Combobox 2",        W, 120, 

__, BUTTON,   "Button 1",   W,120,        D_BUTTON, "Dialog button 1", W, 120, 

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2H, "Checkbox 100", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 

//------------------------------------------------------
 
_Y2H 是什么,是否有 _X2H ?
 
hini #: _Y2H Что это такое, и есть ли это _X2H?

让我们来解析表达式 _Y2H:

  • Y 是坐标
  • 2 表示 "到"。表示某物。
  • H 是高度的简称。

Y 到高度。

在坐标系中,从物体的 Y 点沿其主体移动一段与物体高度(y_size)相等的距离,就会到达物体的最低点。要折叠对象的 Y 坐标必须沿着要折叠对象的高度下降,并最终到达其底部。也就是说,它必须覆盖锚点对象的高度距离,因此锚点被称为 _Y2H


2._X2H 存在,因为 X 坐标只能在水平面内抓取,不能在垂直面内抓取,而 H 代表高度。有一种 _X2W 抓取方式,即把 X 坐标抓取到指定对象的 X + X_SIZE(宽度)点。


关于捕捉的话题,我们将在后面详细讨论。

 

昨天我们已经开始讨论枚举,今天我们就来完成枚举。

 

关于绑定问题,我想补充一点,这里有严格的规定,现在尝试尝试是没有意义的。请等待更完整的解释。

有些绑定可单独用于元素组,有些绑定可用于组内的单个元素。还有一些绑定适合在元素中定位对象(如文本或图标)。

我们稍后再讨论这个问题。

 
Реter Konow #:

昨天我们已经开始讨论枚举,今天我们就来完成枚举。

不过,经过深思熟虑,我决定推迟完成枚举这一主题。理解本主题的后续材料需要语言规则的基础知识,而读者还不具备这些知识。

现在,让我们继续熟悉控件和绑定。

 

到目前为止,在大多数情况下,我们处理的都是一个简单的BUTTON 按钮。每个人都知道按钮是什么,这一点不言自明。不过,我们还是应该详细了解一下。这同样适用于我们之前使用过的其他元素。让我们这样做吧:首先,让我们介绍一下按钮的主要特点和功能,概括性地介绍一下所有内容,然后我们再分别对每个元素进行更详细的讨论。

按钮是一种在按下时会改变状态的交互式元素。在图形界面 中,按钮有不同的用途。大多数情况下,按钮是用来打开或关闭某样东西的,但有时也用来调用窗口。一个简单按钮的应用有很多变体。它是一个相当通用的元素。

我们还考虑过哪些元素?例如,复选框。为什么需要复选框?要在程序设置中启用、禁用或阻止选项,就必须使用复选框。如果需要在多个选项中进行选择,R_BUTTON(单选按钮)元素就很合适。但前提是只有几个选项。

如果选项很多,但又不是太多?那么就可以使用D_LIST 下拉列表C_LIST 组合列表D_LIST 有这样的 段,而 C_LIST没有

如果程序中的选项过多,该怎么办呢?下拉列表由于尺寸较小,会让人感觉不舒服。解决办法是在大窗口中使用长滚动表。您可以在设计器的字体、声音框架 窗口中看到例子。

但是,这些列表需要滚动条,因为它们非常长。这就是为什么要为它们设计一个特殊元素的原因。"视野" V_BOX。这是一个简单的元素,有两个滚动条和自己的画布。顺便说一下,它可以垂直 水平 滚动。画布的大小是通过计算放置的内容自动设置的。

列表项称为L_ITEM,是"列表项"的简称。它们被收集在一个单独的组中,并绘制在指定视场的画布上。每个项目都被称为菜单项或选项的名称,它们可以用一个 SWITCH_ALL 关键字进行切换。要将L_ITEM 项目列表输入V_BOX 概览区域,需要使用关键字"IN"。定位很简单--LEFT_TOP, 0,0,。


接下来,让我们按照同样的顺序详细了解一下列出的元素。我们将讨论定位、状态、属性和属性。

......我们还将考虑在交易程序中的应用选项。

 

普通按钮:BUTTON

4 种构造函数按钮:

与其他经典按钮一样,它的外观相对陈旧,功能简单。有一个图标。


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

  • 交互式按钮I_BUTTON- 交互式按钮:

一个漂亮的交互式按钮,可以流畅地响应光标的悬停/移动。它与普通按钮一样使用,但不太明显,而且在中性状态下没有轮廓边框。大多不带文字,但有图标。形状多为正方形。


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

  • 工具栏按钮(与 MT4 相同TB_BUTTON- 工具栏按钮:

主要用于主窗口头部的工具栏。通常没有文字,但有图标,形状通常为正方形。悬停在光标上时与光标保持一致。可调用窗口或功能。带有箭头。


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

  • D_BUTTON- 对话按钮:

位于对话框底部,用于与用户交互。它包含"确定"、"是"、"否"、"取消"、"中止"、"继续"、"接受"、"下一步"、"上一步"、"跳过"、"确认"、"打开"、"关闭"、.... 等文本。及其他同类文字。


您可以为所有按钮设置图标和文字,还可以为不同状态设置颜色。

同时,按钮还可以根据状态改变文字和图标。中性状态下的文字或图标与激活状态下的文字或图标不同。


例如

所有按钮都被按下,处于中性状态:


现在我们按下它们,它们的文字和图标都发生了变化:(对话按钮除外,因为它在按下后会关闭窗口,没有必要按下)


交互式按钮的文本叠加在图标上,这样设计是因为图标和文本都可以放在按钮内。

 

因此,按钮可以在点击时更改文本。此外,文本和按钮名称是不同的。中立状态的文本可以设置为 N_TEXT,这样就会出现另一个用户文本,而不是按钮名称。

图标也是如此。您可以为中立状态和激活状态指定一个图标。


代码

NEW_WINDOW,  
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "My first window",
//------------------------------------------------------
/*POINT TO WINDOW'S ICON*/  W_ICON, "::Images\\16x16\\Smile.bmp",  
//------------------------------------------------------

//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//----------------------------------------------------------------------------------
/*WINDOW OPENS AT START*/   OPEN_ON_INIT,  /*(OOI)*/

/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  

/*MARGINS OF THE WINDOW*/   MARGINS, 40,40,/*Х, Y*/
//----------------------------------------------------------------------------------
//
//----------------------------------------------------------------------------------
//1. DECLARE A GROUP WITH AN ABSTRACT NAME  A.
//2. DECLARE A NEW ROW OF ELEMENTS IN THE GROUP WITH A SYMBOL  __, 
//3. DECLARE A BUTTON AND WRITE IT'S NAME.
//4. END GROUP WITH THE KEYWORDS  END_GROUP,
//------------------------------------------------------
GROUP, "Buttons group",

__, BUTTON,   "Button 1", W, 120,_,H, 50,   D_BUTTON, "D button 1",   W, 120,_,H, 50,

__, I_BUTTON, "I Button", W, 120,_,H, 50,   TB_BUTTON, "TB button 1", W, 120,_,H, 50, 

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 
//----------------------------
"Button 1",    N_TEXT,  "Neutral state",

"Button 1",    A_TEXT,  "Active state",

"Button 1",    N_LABEL, "::Images\\16x16\\About.bmp",

"Button 1",    A_LABEL, "::Images\\16x16\\3d bar chart.bmp",

"Button 1",    FIC,
//----------------------------

//----------------------------
"I Button",    N_TEXT,  "Neutral", 

"I Button",    A_TEXT,  "Active",

"I Button",    N_LABEL, "::Images\\16x16\\Accounting.bmp",

"I Button",    A_LABEL, "::Images\\16x16\\Address book.bmp", 

"I Button",    FIC,
//----------------------------

//----------------------------
"D button 1",    N_TEXT,  "Also Neutral",

"D button 1",    A_TEXT,  "Also Active",

"D button 1",    N_LABEL, "::Images\\16x16\\Alarm clock.bmp",

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

//----------------------------
"TB button 1",    N_TEXT,  "TB Neutral",

"TB button 1",    A_TEXT,  "TB Active",

"TB button 1",    N_LABEL, "::Images\\16x16\\Alarm clock.bmp",

"TB button 1",    A_LABEL,  "::Images\\16x16\\Address book.bmp", 

"TB Button 1",    FIC,

//------------------------------------------------------
//FINISH THE WINDOW BY KEYWORDS END_WINDOW,
//------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------
 

按钮的主要功能之一或许就是调用窗口。按下一个窗口中的按钮,另一个窗口就会打开。

这是如何实现的呢?

有两种方法:

  • 我们在按钮属性中写入关键字OPENS_WINDOW ,然后写入要调用的窗口名称。
  • 或者将按钮命名为与它应调用的窗口相同的名称,并隐藏按钮文本。或者使用N_TEXTA_TEXT 覆盖按钮文本。

需要注意的是:将按钮或菜单项的名称与窗口名称相匹配,会导致在单击这些项目时打开这些窗口

//+------------------------------------------------------------------+
//|                                              My first window.mqh |
//+------------------------------------------------------------------+
//DECLARE A NEW WINDOW
//----------------------------------------------------------------------------------
NEW_WINDOW, 
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "Just a window",
//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//------------------------------------------------------ 
/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  
//------------------------------------------------------

END_WINDOW,
//----------------------------------------------------------------------------------




//DECLARE A NEW WINDOW
//----------------------------------------------------------------------------------
NEW_WINDOW,  
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "My first window",
//------------------------------------------------------
/*POINT TO WINDOW'S ICON*/  W_ICON, "::Images\\16x16\\Smile.bmp",  
//------------------------------------------------------

//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//----------------------------------------------------------------------------------
/*WINDOW OPENS AT START*/   OPEN_ON_INIT,  /*(OOI)*/

/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  

/*MARGINS OF THE WINDOW*/   MARGINS, 40,40,/*Х, Y*/
//----------------------------------------------------------------------------------
//
//----------------------------------------------------------------------------------
//1. DECLARE A GROUP WITH AN ABSTRACT NAME  A.
//2. DECLARE A NEW ROW OF ELEMENTS IN THE GROUP WITH A SYMBOL  __, 
//3. DECLARE A BUTTON AND WRITE IT'S NAME.
//4. END GROUP WITH THE KEYWORDS  END_GROUP,
//------------------------------------------------------
GROUP, "Buttons group",

__, BUTTON,  "Just a window", W, 150, //the button WILL call the window due to sharing the same name.   

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 
//----------------------------
"Just a window",    N_TEXT,  "Press to open",//redefine text on the button

"Just a window",    N_LABEL, "::Images\\16x16\\Alarm clock.bmp",
//------------------------------------------------------
//FINISH THE WINDOW BY KEYWORDS END_WINDOW,
//------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------


第二种变体

//+------------------------------------------------------------------+
//|                                              My first window.mqh |
//+------------------------------------------------------------------+
//DECLARE A NEW WINDOW
//----------------------------------------------------------------------------------
NEW_WINDOW, 
 
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "Just a window",
//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//------------------------------------------------------ 
/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  
//------------------------------------------------------

END_WINDOW,
//----------------------------------------------------------------------------------




//DECLARE A NEW WINDOW
//----------------------------------------------------------------------------------
NEW_WINDOW,  
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "My first window",
//------------------------------------------------------
/*POINT TO WINDOW'S ICON*/  W_ICON, "::Images\\16x16\\Smile.bmp",  
//------------------------------------------------------

//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//----------------------------------------------------------------------------------
/*WINDOW OPENS AT START*/   OPEN_ON_INIT,  /*(OOI)*/

/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  

/*MARGINS OF THE WINDOW*/   MARGINS, 40,40,/*Х, Y*/
//----------------------------------------------------------------------------------
//
//----------------------------------------------------------------------------------
//1. DECLARE A GROUP WITH AN ABSTRACT NAME  A.
//2. DECLARE A NEW ROW OF ELEMENTS IN THE GROUP WITH A SYMBOL  __, 
//3. DECLARE A BUTTON AND WRITE IT'S NAME.
//4. END GROUP WITH THE KEYWORDS  END_GROUP,
//------------------------------------------------------
GROUP, "Buttons group",

__, BUTTON,  "Press to open", W, 150,   

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 
//----------------------------
"Press to open", OPENS_WINDOW, "Just a window",//opens the window by the keyword 

"Press to open", N_LABEL, "::Images\\16x16\\Alarm clock.bmp",
//------------------------------------------------------
//FINISH THE WINDOW BY KEYWORDS END_WINDOW,
//------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------



结果: