专家顾问 - 杂项问题 - 页 6

 

我正在尝试做很多重置按钮,但我需要得到比这更好的结果,但我做不到。
(我不喜欢我所有的EA和指标按钮对象,因为它们都像这个一样非常丑陋。)

我需要你们的帮助,给我一些好的建议,我真的需要你们的帮助。
我花了很多时间,但我不知道我的代码有什么问题。

提前感谢。

ObjectCreate     ( 0, "button lot reset", OBJ_BUTTON           , 0, 0, 0           );
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              );
 
  1. 如果它是隐藏的,你怎么能看到并点击它?
  2. ZORDER不是布尔值,是一个int 0...
 
//+------------------------------------------------------------------+
//| 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);
  }
//+------------------------------------------------------------------+

你可以使用文档中的函数"按原样 "来创建按钮,只需将其添加到你的代码底部,你可以调用该函数并传递参数。

这样你就可以直接调用了。

ButtonCreate(...

同时

whroeder1:
  1. 如果它是隐藏的,你怎么能看到并点击它?
  2. ZORDER不是布尔值,它是一个int 0...
隐藏就是在对象列表中隐藏。
 
whroeder1:
  1. 如果它是隐藏的,你怎么能看到并点击它?
  2. ZORDER不是布尔值,它是一个int 0...。

谢谢,我把它修好了,只是它是一个错误。
--------------------------------------------

Marco vd Heijden:

请你使用文档中的函数 "按原样 "来创建按钮,只需将其添加到你的代码底部,你可以调用该函数并传递参数。

所以你可以直接调用。

ButtonCreate(...)

谢谢你,马可,这对我帮助很大,我的EA代码看起来已经清理干净了。
我还需要问一下下面的代码,它是什么,它是如何工作的? (我也读过,但我不太明白)

请再解释一下,谢谢。

ObjectSetString ( 0, name, OBJPROP_TOOLTIP , tip );

----------------------------------------

另外,我需要像下面的代码那样使用void 而不是bool,那么哪一个好呢?

bool ButtonCreate(...)

// or

void ButtonCreate(...)
 

该函数要么返回真,要么返回假,这取决于按钮的创建是否成功,因此,如果你想验证按钮是否真的被创建,这取决于你。

对于第二个问题,当你把鼠标悬停在图表上的对象上时,工具提示是可见的。

你现在的工作方式有局限性。

如果你想扩展,请阅读以下文章。

https://www.mql5.com/en/search#!keyword=graphical%20interfaces&module=mql5_module_articles

 
Marco vd Heijden:

该函数要么返回真,要么返回假,这取决于按钮的创建是否成功,因此,如果你想验证按钮是否真的被创建,这取决于你。

对于第二个问题,当你把鼠标悬停在图表上的对象上时,工具提示是可见的。

你现在的工作方式有局限性。

如果你想扩展,请阅读以下文章。

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了)

下面的代码有问题吗?

//|     Lot Reset
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"。

ObjectSetString( chart_ID, name, OBJPROP_BMPFILE, on_off, file )
 

请参阅。

https://www.mql5.com/en/docs/constants/objectconstants/enum_object/obj_bitmap

对于位图的问题。

而对于另一个问题,你可以把它拼接成独立的部分,在sparam之外设置状态。

Documentation on MQL5: Standard Constants, Enumerations and Structures / Objects Constants / Object Types / OBJ_BITMAP
Documentation on MQL5: Standard Constants, Enumerations and Structures / Objects Constants / Object Types / OBJ_BITMAP
  • www.mql5.com
Standard Constants, Enumerations and Structures / Objects Constants / Object Types / OBJ_BITMAP - Reference on algorithmic/automated trading language for MetaTrader 5
原因: