//+------------------------------------------------------------------+
//| Menu.mq4 |
//| Copyright 2018, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
extern long X=10; //Смещение меню по Х
extern long Y=10; //Смещение меню по Y
string Prefix="Example-359_";//Префикс для объектов на чарте
long X1,X2,Y1,Y2; //Координаты меню
bool ShowMenu=false;//Есть или нет меню на чарте
int Widht=80;//Ширина элемента меню
int Height=20;//Высота элемента меню
string FontName="Arial";//Имя шрифта для меню
int FontSize=10;//Размер шрифта
color clrMain=clrSteelBlue;//Основной цвет для меню
color clrFont=clrWhite;//Цвет шрифта
bool SwMenu1=false;//Состояние переключателя меню 1
bool SwMenu2=false;//Состояние переключателя меню 2
bool SwMenu3=false;//Состояние переключателя меню 3
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);//Устанавливаем отслеживание координат мышки на чарте
//Создадим панельку на которую будем реагировать разворачиванием меню
EditCreate(0,Prefix+"MM",0,X,Y,Widht,Height,CORNER_LEFT_UPPER,"Main menu",FontName,FontSize,ALIGN_LEFT,true,clrFont,clrMain,clrMain,false,false);
//Пересчитаем координаты для реагирования
X1=X; Y1=Y; X2=X+Widht; Y2=Y+Height;
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
DeleteMenu();
ObjectDelete(0,Prefix+"MM");
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//Если мышка в границах реагирования то реагируем
if(id==CHARTEVENT_MOUSE_MOVE && lparam>=X1 && lparam<=X2 && dparam>=Y1 && dparam<=Y2)
{
if(!ShowMenu){CreateMenu();}//Если меню нет на чарте то создаём его
}
//Если мышка вне границ реагирования то проверяем
if(id==CHARTEVENT_MOUSE_MOVE && (lparam<X1 || lparam>X2 || dparam<Y1 || dparam>Y2))
{
if(ShowMenu){DeleteMenu();}//Если меню есть на чарте то удаляем
}
//Реагируем на нажатие на объекты
if(id==CHARTEVENT_OBJECT_CLICK && sparam==Prefix+"M1")
{
ChangeMenu(sparam);
}
if(id==CHARTEVENT_OBJECT_CLICK && sparam==Prefix+"M2")
{
ChangeMenu(sparam);
}
if(id==CHARTEVENT_OBJECT_CLICK && sparam==Prefix+"M3")
{
ChangeMenu(sparam);
}
}
//+------------------------------------------------------------------+
//| Function create object text |
//+------------------------------------------------------------------+
bool EditCreate(const long chart_ID=0,
const string name="Edit",
const int sub_window=0,
const long x=0,
const long y=0,
const int width=50,
const int height=18,
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER,
const string text="Text",
const string font="Arial",
const int font_size=10,
const ENUM_ALIGN_MODE align=ALIGN_CENTER,
const bool read_only=false,
const color clr=clrWhite,
const color back_clr=clrWhite,
const color border_clr=clrSteelBlue,
const bool back=false,
const bool selection=false,
const bool hidden=true,
const long z_order=0)
{
ResetLastError();
if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0))
{
Print(__FUNCTION__,
"Code ERROR: ",GetLastError());
return(false);
}
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align);
ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only);
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
return(true);
}
//+------------------------------------------------------------------+
//|Function create menu |
//+------------------------------------------------------------------+
void DeleteMenu()
{
ObjectDelete(0,Prefix+"M1");
ObjectDelete(0,Prefix+"M2");
ObjectDelete(0,Prefix+"M3");
//Пересчитаем координаты реагирования
Y2=Y+Height;
ShowMenu=false;
}
//+------------------------------------------------------------------+
//|Function delete menu |
//+------------------------------------------------------------------+
void CreateMenu()
{
string tmpStr="";
if(SwMenu1){tmpStr="ON 1";}else{tmpStr="OFF 1";}//Выставляем состояние переключателя 1
EditCreate(0,Prefix+"M1",0,X,Y+21,Widht,Height,CORNER_LEFT_UPPER,tmpStr,FontName,FontSize,ALIGN_LEFT,true,clrFont,clrMain,clrMain,false,false);
if(SwMenu2){tmpStr="ON 1";}else{tmpStr="OFF 1";}//Выставляем состояние переключателя 2
EditCreate(0,Prefix+"M2",0,X,Y+42,Widht,Height,CORNER_LEFT_UPPER,tmpStr,FontName,FontSize,ALIGN_LEFT,true,clrFont,clrMain,clrMain,false,false);
if(SwMenu3){tmpStr="ON 1";}else{tmpStr="OFF 1";}//Выставляем состояние переключателя 3
EditCreate(0,Prefix+"M3",0,X,Y+63,Widht,Height,CORNER_LEFT_UPPER,tmpStr,FontName,FontSize,ALIGN_LEFT,true,clrFont,clrMain,clrMain,false,false);
//Пересчитаем координаты реагирования
Y2=Y+63+Height;
ShowMenu=true;
}
//+------------------------------------------------------------------+
//|Change menu |
//+------------------------------------------------------------------+
void ChangeMenu(string PMenu)
{
if(PMenu==Prefix+"M1")
{
if(SwMenu1)
{
ObjectSetString(0,PMenu,OBJPROP_TEXT,"OFF 1");
SwMenu1=false;
}
else
{
ObjectSetString(0,PMenu,OBJPROP_TEXT,"ON 1");
SwMenu1=true;
}
}
if(PMenu==Prefix+"M2")
{
if(SwMenu2)
{
ObjectSetString(0,PMenu,OBJPROP_TEXT,"OFF 1");
SwMenu2=false;
}
else
{
ObjectSetString(0,PMenu,OBJPROP_TEXT,"ON 1");
SwMenu2=true;
}
}
if(PMenu==Prefix+"M3")
{
if(SwMenu3)
{
ObjectSetString(0,PMenu,OBJPROP_TEXT,"OFF 1");
SwMenu3=false;
}
else
{
ObjectSetString(0,PMenu,OBJPROP_TEXT,"ON 1");
SwMenu3=true;
}
}
}
//+------------------------------------------------------------------+
Здравствуйте! Скажите, что означают в настройках функции:
= 0.7; // плюс
= 1; // минус
bool SwMenu1=false;//Состояние переключателя меню 1
bool SwMenu2=false;//Состояние переключателя меню 2
bool SwMenu3=false;//Состояние переключателя меню 3
AM2