很棒的教程......干得好
Isaac Amo #:
很棒的教程......干得好
很棒的教程......干得好
@Isaac Amo 我很感谢你的反馈和认可。我受宠若惊。谢谢。
哇,您能分享这篇文章真是太好了。幸运的发现
感谢@Malcolm Campbell 的评论和反馈。
一些字节。封面上是一个漂亮的彩色界面,这里是 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); }
新文章 在MQL5中创建交互式图形用户界面(第1部分):制作面板已发布:
本文探讨了使用MetaQuotes Language 5(MQL5)设计和实施图形用户界面(GUI)面板的基本步骤。自定义实用面板通过简化常见任务并可视化重要的交易信息,增强了交易中的用户交互。通过创建自定义面板,交易者可以优化其工作流程,并在交易操作中节省时间。
我们将创建一个GUI面板,其中包含任何交易者可能需要的最常用的实用工具,因此我们希望在这一系列中概述并涵盖所有内容。因此,需要涵盖的元素数量众多,但我们会将它们整合在一起,以便更容易理解。我们的GUI开发将使用4个元素,并通过这些元素来创建它。该面板将包括交易按钮的创建、锐利的矩形框、实时更新功能、表情符号的使用、不同的字体样式、标签、可移动的面板部分以及悬停效果。为了阐述整体内容,我们在下面给出了一个示例。
作者:Allan Munene Mutiiria