文章 "在MQL5中创建交互式图形用户界面(第1部分):制作面板"

 

新文章 在MQL5中创建交互式图形用户界面(第1部分):制作面板已发布:

本文探讨了使用MetaQuotes Language 5(MQL5)设计和实施图形用户界面(GUI)面板的基本步骤。自定义实用面板通过简化常见任务并可视化重要的交易信息,增强了交易中的用户交互。通过创建自定义面板,交易者可以优化其工作流程,并在交易操作中节省时间。

我们将创建一个GUI面板,其中包含任何交易者可能需要的最常用的实用工具,因此我们希望在这一系列中概述并涵盖所有内容。因此,需要涵盖的元素数量众多,但我们会将它们整合在一起,以便更容易理解。我们的GUI开发将使用4个元素,并通过这些元素来创建它。该面板将包括交易按钮的创建、锐利的矩形框、实时更新功能、表情符号的使用、不同的字体样式、标签、可移动的面板部分以及悬停效果。为了阐述整体内容,我们在下面给出了一个示例。

GUI示例

作者:Allan Munene Mutiiria

 
很棒的教程......干得好
 
Isaac Amo #:
很棒的教程......干得好

@Isaac Amo 我很感谢你的反馈和认可。我受宠若惊。谢谢。

 

哇,您能分享这篇文章真是太好了。幸运的发现

 
Malcolm Campbell #:

哇,你能分享这篇文章真是太好了。幸运的发现

感谢@Malcolm Campbell 的评论和反馈。

 
一些字节。封面上是一个漂亮的彩色界面,这里是 Windows XP 的一个窗口)。
文章很有用,谢谢。
 
Petr Zharuk #:
一些字节。封面上是一个漂亮的彩色界面,这里是 Windows XP 的一个窗口)。
文章很有用,谢谢。
您好。感谢您的善意反馈。非常感谢。也谢谢你,欢迎你。
 

可以使这个面板随意移动位置吗? move free???

 
到目前为止,我是用手机对角阅读的....。
我会在电脑上读得更透彻,也会根据您的文章制作一个交易界面。到目前为止,我只制作了买入和卖出按钮。我知道它是如何工作的。我还会继续阅读,并在我的电脑上制作一个图形界面!我一直想使用一个非常有用的工具来优化交易订单。
 

作为 MQL5 的初学者,我非常喜欢这篇文章。感谢您的文章。但我认为,如果ObjectDelete 在图形对象的所有创建和保存名称中循环执行,可以大大减少去初始化功能。为此,您需要在创建和初始化图形对象参数的函数中添加一个字符串数组、一个图形对象计数器和用于将名称传递到数组的操作符。我是这样做的:

#define  ADDOBJ ArrayResize(objectsArray, objectCount+1);\
   objectsArray[objectCount] = objName;\
   objectCount++;

string objectsArray[];
int objectCount = 0;
//+------------------------------------------------------------------+
//| 专家去初始化函数|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
// 删除已创建的图形对象
   for(int i = 0; i < objectCount; i++)
     {
      if(ObjectFind(0, objectsArray[i]) >= 0)
        {
         ObjectDelete(0, objectsArray[i]);
         // Print("Object deleted: ", objectsArray[i]);
        }
     }
  }

我还添加了

input int base_x = 300;  // 左缩进
input int base_y = 100;  // 顶部缩进
input bool Include_DropDown = false; // 显示下拉菜单
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   CreatPanel();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|    Function to create Panel                                      |
//+------------------------------------------------------------------+
void CreatPanel()
  {
   createRecLabel("MAIN_REC",10,30,250,400,clrWhite,1,clrBlack);
   createRecLabel("MAIN_SUB_REC",15,35,240,390,C'245,245,245',1,clrNONE);
   createRecLabel("MAIN_LINE_UP",15,35,240,1,C'245,245,245',1,clrNONE,BORDER_RAISED);
...

   if(Include_DropDown)
     {
      createDropDown();
     }
   ChartRedraw(0);
  }
在创建函数中,我是这样改进的

 

我还稍微改变了创建图形对象的 功能:

//+------------------------------------------------------------------+
//| 创建文本标签的函数|
//+------------------------------------------------------------------+
bool createLabel(string objName, int xD, int yD,
                 string txt, color clrTxt = clrBlack, int fontSize = 12,
                 string font = "Arial Rounded MT Bold")
  {
   ResetLastError();

   if(!ObjectCreate(0, objName, OBJ_LABEL, 0, 0, 0))
     {
      Print(__FUNCTION__, ": failed to create the label! Error code = ", _LastError);
      return (false);
     }

   ObjectSetInteger(0, objName, OBJPROP_XDISTANCE, base_x + xD); // 添加 base_x +
   ObjectSetInteger(0, objName, OBJPROP_YDISTANCE, base_y + yD); // 添加 base_y +
   ObjectSetInteger(0, objName, OBJPROP_CORNER, CORNER_LEFT_UPPER); 
   ObjectSetString(0, objName, OBJPROP_TEXT, txt);
   ObjectSetInteger(0, objName, OBJPROP_COLOR, clrTxt);
   ObjectSetInteger(0, objName, OBJPROP_FONTSIZE, fontSize);
   ObjectSetString(0, objName, OBJPROP_FONT, font);
   ObjectSetInteger(0, objName, OBJPROP_BACK, false);
   ObjectSetInteger(0, objName, OBJPROP_STATE, false);
   ObjectSetInteger(0, objName, OBJPROP_SELECTABLE, false);
   ObjectSetInteger(0, objName, OBJPROP_SELECTED, false);

   ADDOBJ 

   return (true);
  }