помогите разобраться с простым кодом (панель и две кнопки)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
rainthegod
19
rainthegod  

Создал таки панель и две кнопки в ней (пока без функций)

При добавлении советника на график, одна кнопка появляется криво поверх панели. Как только я делаю клик на графике или попытаюсь захватить панель, эта кнопка исчезает или перемещается и в панели появляются обе мои кнопки в нужном положении (и панель готова к перемещению). Пытался и так и сяк редактировать параметры X/Y кнопок, что-то не помогает, кнопка или кнопки вообще выплывают из панели и двигаются по каким-то своим осям при перемещении панели. Если пытаюсь добавить больше координат для кнопок в разделе OnInit, то они плывут из панели...(поэтому оставил пока ButtonCreate(0,"buttonbuy",0,0,0);)

В настройках осей панели я выставил так, чтобы она появлялась в правой части экрана ближе к центру.

Уже в процессе переноса работы с панелью все в порядке, панель перемещается и кнопки за ней (чтобы кнопки следы не оставляли, это потом уже сделаю)

Как это исправить? что я там напутал с X/Y и прочим? Спасибо!

upd. Продублировал парамерты из OnChartEvent в OnInit, теперь сразу панель с двумя кнопками появляется, но что-то же здесь все равно не так сделано? Код нужно подправить?

Если я пытаюсь убрать те же строки из OnChartEvent, то панель перемещается уже без кнопок), а они остаются на месте что ли. 

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
   {

//--- create application dialog
         RectLabelCreate(0,"RectLabel",0,0,0);
   
   
         ButtonCreate(0,"buttonbuy",0,0,0,0,0,0,"Buy","Tahoma",11,clrWhite,clrLimeGreen,clrNONE,false,false,false,true,0);
         ButtonCreate(0,"buttonsell",0,0,0,0,0,0,"Sell","Tahoma",11,clrWhite,clrRed,clrNONE,false,false,false,true,0);
   
         int x = (int) ObjectGetInteger(0,"RectLabel",OBJPROP_XDISTANCE);
         int y = (int) ObjectGetInteger(0,"RectLabel",OBJPROP_YDISTANCE);
   
         ObjectSetInteger(0,"buttonbuy",OBJPROP_XDISTANCE,x+5);
         ObjectSetInteger(0,"buttonbuy",OBJPROP_YDISTANCE,y+35);
   
         ObjectSetInteger(0,"buttonsell",OBJPROP_XDISTANCE,x+100);
         ObjectSetInteger(0,"buttonsell",OBJPROP_YDISTANCE,y+35);
   
return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
ObjectDelete (0,"RectLabel");   
ObjectDelete (0,"buttonbuy");   
ObjectDelete (0,"buttonsell");   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {

//---
         int x = (int) ObjectGetInteger(0,"RectLabel",OBJPROP_XDISTANCE);
         int y = (int) ObjectGetInteger(0,"RectLabel",OBJPROP_YDISTANCE);
   
         ObjectSetInteger(0,"buttonbuy",OBJPROP_XDISTANCE,x+5);
         ObjectSetInteger(0,"buttonbuy",OBJPROP_YDISTANCE,y+35);
   
         ObjectSetInteger(0,"buttonsell",OBJPROP_XDISTANCE,x+100);
         ObjectSetInteger(0,"buttonsell",OBJPROP_YDISTANCE,y+35);

  }
//+------------------------------------------------------------------+ 
//| Создает прямоугольную метку                                      | 
//+------------------------------------------------------------------+ 
bool RectLabelCreate(const long             chart_ID=0,               // ID графика 
                     const string           name="RectLabel",         // имя метки 
                     const int              sub_window=0,             // номер подокна 
                     const int              x=0,                      // координата по оси X 
                     const int              y=0,                      // координата по оси Y 
                     const int              width=0,                 // ширина 
                     const int              height=0,                // высота 
                     const color            back_clr=C'236,233,216',  // цвет фона 
                     const ENUM_BORDER_TYPE border=BORDER_SUNKEN,     // тип границы 
                     const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // угол графика для привязки 
                     const color            clr=clrRed,               // цвет плоской границы (Flat) 
                     const ENUM_LINE_STYLE  style=STYLE_SOLID,        // стиль плоской границы 
                     const int              line_width=1,             // толщина плоской границы 
                     const bool             back=false,               // на заднем плане 
                     const bool             selection=true,          // выделить для перемещений 
                     const bool             hidden=true,              // скрыт в списке объектов 
                     const long             z_order=0)                // приоритет на нажатие мышью 
  { 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим прямоугольную метку 
   if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать прямоугольную метку! Код ошибки = ",GetLastError()); 
      return(false); 
     } 
//--- установим координаты метки 
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,997); 
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,110); 
//--- установим размеры метки 
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,200); 
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,150); 
//--- установим цвет фона 
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,clrSteelBlue); 
//--- установим тип границы 
   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border); 
//--- установим угол графика, относительно которого будут определяться координаты точки 
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); 
//--- установим цвет плоской рамки (в режиме Flat) 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
//--- установим стиль линии плоской рамки 
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); 
//--- установим толщину плоской границы 
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width); 
//--- отобразим на переднем (false) или заднем (true) плане 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
//--- включим (true) или отключим (false) режим перемещения метки мышью 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,true); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,true); 
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
//--- установим приоритет на получение события нажатия мыши на графике 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 
//--- успешное выполнение 
   return(true); 
  }
//+------------------------------------------------------------------+ 
//| Создает кнопку                                                   | 
//+------------------------------------------------------------------+ 
bool ButtonCreate(const long              chart_ID=0,               // ID графика 
                  const string            name="button",            // имя кнопки 
                  const int               sub_window=0,             // номер подокна 
                  const int               x=150,                      // координата по оси X 
                  const int               y=150,                      // координата по оси Y 
                  const int               width=0,                 // ширина кнопки 
                  const int               height=0,                // высота кнопки 
                  const ENUM_BASE_CORNER  corner=0, // угол графика для привязки 
                  const string            text="",            // текст 
                  const string            font="Tahoma",             // шрифт 
                  const int               font_size=10,             // размер шрифта 
                  const color             clr=clrWhite,             // цвет текста 
                  const color             back_clr=clrLimeGreen,  // цвет фона 
                  const color             border_clr=clrNONE,       // цвет границы 
                  const bool              state=false,              // нажата/отжата 
                  const bool              back=false,               // на заднем плане 
                  const bool              selection=false,          // выделить для перемещений 
                  const bool              hidden=true,              // скрыт в списке объектов 
                  const long              z_order=0)                // приоритет на нажатие мышью 
  { 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим кнопку 
   if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать кнопку! Код ошибки = ",GetLastError()); 
      return(false); 
     } 
//--- установим координаты кнопки 
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); 
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); 
//--- установим размер кнопки 
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,75); 
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,40); 
//--- установим угол графика, относительно которого будут определяться координаты точки 
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); 
//--- установим текст 
   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_COLOR,clr); 
//--- установим цвет фона 
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); 
//--- установим цвет границы 
   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr); 
//--- отобразим на переднем (false) или заднем (true) плане 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,false); 
//--- переведем кнопку в заданное состояние 
   ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state); 
//--- включим (true) или отключим (false) режим перемещения кнопки мышью 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
//--- установим приоритет на получение события нажатия мыши на графике 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 
//--- успешное выполнение 
   return(true); 
  } 
//+------------------------------------------------------------------+
rainthegod
19
rainthegod  

спасибо, блин... видимо я не там тему создал, мне же нужен форум по mql4 :(

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий