//+------------------------------------------------------------------+ //| Create the button | //+------------------------------------------------------------------+ bool ButtonCreate(constlong chart_ID=0, // chart's ID conststring name="Button", // button name constint sub_window=0, // subwindow index constint x=0, // X coordinate constint y=0, // Y coordinate constint width=50, // button width constint height=18, // button height constENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // chart corner for anchoring conststring text="Button", // text conststring font="Arial", // font constint font_size=10, // font size constcolor clr=clrBlack, // text color constcolor back_clr=C'236,233,216', // background color constcolor border_clr=clrNONE, // border color constbool state=false, // pressed/released constbool back=false, // in the background constbool selection=false, // highlight to move constbool hidden=true, // hidden in the object list constlong z_order=0) // priority for mouse click { //--- reset the error value ResetLastError(); //--- create the button if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0)) { Print(__FUNCTION__, ": failed to create the button! Error code = ",GetLastError()); return(false); } //--- set button coordinates ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); //--- set button size ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); //--- set the chart's corner, relative to which point coordinates are defined ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); //--- set the text ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); //--- set text font ObjectSetString(chart_ID,name,OBJPROP_FONT,font); //--- set font size ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); //--- set text color ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); //--- set background color ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); //--- set border color ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr); //--- display in the foreground (false) or background (true) ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); //--- set button state ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state); //--- enable (true) or disable (false) the mode of moving the button by mouse ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); //--- hide (true) or display (false) graphical object name in the object list ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); //--- set the priority for receiving the event of a mouse click in the chart ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); //--- successful execution return(true); } //+------------------------------------------------------------------+
Standard Constants, Enumerations and Structures / Objects Constants / Object Types / OBJ_BITMAP - Reference on algorithmic/automated trading language for MetaTrader 5
我正在尝试做很多重置按钮,但我需要得到比这更好的结果,但我做不到。
(我不喜欢我所有的EA和指标按钮对象,因为它们都像这个一样非常丑陋。)
我需要你们的帮助,给我一些好的建议,我真的需要你们的帮助。
我花了很多时间,但我不知道我的代码有什么问题。
提前感谢。
ObjectSetString ( 0, "button lot reset", OBJPROP_TEXT , "x" );
ObjectSetString ( 0, "button lot reset", OBJPROP_FONT , "Verdana" );
ObjectSetInteger ( 0, "button lot reset", OBJPROP_FONTSIZE , 14 );
ObjectSetInteger ( 0, "button lot reset", OBJPROP_XDISTANCE , 16 );
ObjectSetInteger ( 0, "button lot reset", OBJPROP_YDISTANCE , 16 );
ObjectSetInteger ( 0, "button lot reset", OBJPROP_XSIZE , 18 );
ObjectSetInteger ( 0, "button lot reset", OBJPROP_YSIZE , 18 );
ObjectSetInteger ( 0, "button lot reset", OBJPROP_CORNER , CORNER_LEFT_UPPER );
ObjectSetInteger ( 0, "button lot reset", OBJPROP_COLOR , White );
ObjectSetInteger ( 0, "button lot reset", OBJPROP_BGCOLOR , Black );
ObjectSetInteger ( 0, "button lot reset", OBJPROP_BORDER_COLOR , Black );
ObjectSetInteger ( 0, "button lot reset", OBJPROP_STATE , false );
ObjectSetInteger ( 0, "button lot reset", OBJPROP_BACK , false );
ObjectSetInteger ( 0, "button lot reset", OBJPROP_SELECTABLE , false );
ObjectSetInteger ( 0, "button lot reset", OBJPROP_SELECTED , false );
ObjectSetInteger ( 0, "button lot reset", OBJPROP_HIDDEN , true );
ObjectSetInteger ( 0, "button lot reset", OBJPROP_ZORDER , true );
//| Create the button |
//+------------------------------------------------------------------+
bool ButtonCreate(const long chart_ID=0, // chart's ID
const string name="Button", // button name
const int sub_window=0, // subwindow index
const int x=0, // X coordinate
const int y=0, // Y coordinate
const int width=50, // button width
const int height=18, // button height
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // chart corner for anchoring
const string text="Button", // text
const string font="Arial", // font
const int font_size=10, // font size
const color clr=clrBlack, // text color
const color back_clr=C'236,233,216', // background color
const color border_clr=clrNONE, // border color
const bool state=false, // pressed/released
const bool back=false, // in the background
const bool selection=false, // highlight to move
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- reset the error value
ResetLastError();
//--- create the button
if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0))
{
Print(__FUNCTION__,
": failed to create the button! Error code = ",GetLastError());
return(false);
}
//--- set button coordinates
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- set button size
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- set the chart's corner, relative to which point coordinates are defined
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- set the text
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- set text font
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- set font size
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- set text color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set background color
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- set border color
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- set button state
ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
//--- enable (true) or disable (false) the mode of moving the button by mouse
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//+------------------------------------------------------------------+
你可以使用文档中的函数"按原样 "来创建按钮,只需将其添加到你的代码底部,你可以调用该函数并传递参数。
这样你就可以直接调用了。
同时
谢谢,我把它修好了,只是它是一个错误。
--------------------------------------------
请你使用文档中的函数 "按原样 "来创建按钮,只需将其添加到你的代码底部,你可以调用该函数并传递参数。
所以你可以直接调用。
谢谢你,马可,这对我帮助很大,我的EA代码看起来已经清理干净了。
我还需要问一下下面的代码,它是什么,它是如何工作的? (我也读过,但我不太明白)
请再解释一下,谢谢。
----------------------------------------
另外,我需要像下面的代码那样使用void 而不是bool,那么哪一个好呢?
// or
void ButtonCreate(...)
该函数要么返回真,要么返回假,这取决于按钮的创建是否成功,因此,如果你想验证按钮是否真的被创建,这取决于你。
对于第二个问题,当你把鼠标悬停在图表上的对象上时,工具提示是可见的。
你现在的工作方式有局限性。
如果你想扩展,请阅读以下文章。
https://www.mql5.com/en/search#!keyword=graphical%20interfaces&module=mql5_module_articles
该函数要么返回真,要么返回假,这取决于按钮的创建是否成功,因此,如果你想验证按钮是否真的被创建,这取决于你。
对于第二个问题,当你把鼠标悬停在图表上的对象上时,工具提示是可见的。
你现在的工作方式有局限性。
如果你想扩展,请阅读以下文章。
https://www.mql5.com/en/search#!keyword=graphical%20interfaces&module=mql5_module_articles
巨大的感谢。
WOW,伙计,你将成为我的男人,Marco先生。
(从你的第一条评论开始--你帮了我很多--你总是试图理解我的关切--再一次表示感谢)
我需要在我的EA的代码中使用.PNG 文件格式,用于LotSize图标。
但我发现只有.BMP 文件格式,所以谁能帮助我/建议我?
如果有任何评论,我将非常感激,只是我比较着急。
谢谢。
我试着如果lotsize比lotvalue好,就用'State true',否则用'State false'。
(当我点击'Reset'对象时,变成'state false',在我增加lot size后,状态就不会变成true了)
下面的代码有问题吗?
if ( sparam == _namelotRset )
{
if ( _lotSize > _lotValue )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, true );
} //---if Close
else
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
} //---if Close
_lotSize = _lotValue * _lotMin;
_infoUpdate();
return;
} //---if Close
谢谢!
//----第二次编辑
我试图用下面的代码使"ON OFF"。
请参阅。
https://www.mql5.com/en/docs/constants/objectconstants/enum_object/obj_bitmap
对于位图的问题。
而对于另一个问题,你可以把它拼接成独立的部分,在sparam之外设置状态。