Смена OBJ_BITMAP_LABEL при смене фона терминала - страница 2

 
ares96:

Спасибо вам большое что отвечаете, пишите... Спасибо) больше не кто в подобных постах не отвечал

Подскажите пожалуйста как обновлять в OnChartEvent().  ???

Сделал как вы "сказали"  создание кнопки в OnInit() таким образом:

Теперь как её обновить ??? пожалуйста ответьте

Чтобы я как-то помог, нужно знать, что это за функция - ButtonPicture. Это пользовательская функция, код которой Вы пока не привели.

 
Ihor Herasko:

Чтобы я как-то помог, нужно знать, что это за функция - ButtonPicture. Это пользовательская функция, код которой Вы пока не привели.

Спасибо что ответили, выкладываю ButtonPicture, посмотрите пожалуйста

P.S этот код у меня еще на логотип при загрузки индикатора 

//+------------------------------------------------------------------+
bool ButtonPicture(    const long              chart_ID=0,               // ID графика 
                       const string            name="BmpLabel",          // имя метки 
                       const int               sub_window=0,             // номер подокна 
                       const int               x=0,                      // координата по оси X 
                       const int               y=0,                      // координата по оси Y 
                       const string            file_on="",               // картинка в режиме On 
                       const string            file_off="",              // картинка в режиме Off 
                       const int               width=0,                  // X-координата области видимости 
                       const int               height=0,                 // Y-координата области видимости 
                       const int               x_offset=10,              // смещение области видимости по X 
                       const int               y_offset=10,              // смещение области видимости по Y 
                       const bool              state=false,              // нажата/отжата 
                       const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // угол графика для привязки 
                       const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки  
                       const color             clr=clrRed,               // цвет рамки при выделении 
                       const ENUM_LINE_STYLE   style=STYLE_SOLID,        // стиль линии при выделении 
                       const int               point_width=1,            // размер точки перемещения 
                       const bool              back=false,               // на заднем плане 
                       const bool              selection=false,          // выделить для перемещений 
                       const bool              hidden=true,              // скрыт в списке объектов 
                       const long              z_order=0)                // приоритет на нажатие мышью 
  {
//--- сбросим значение ошибки 
   ResetLastError();
//--- создадим графическую метку 
   if(ObjectFind(ChartID(),"menu")==0)
      return false;

   if(ObjectCreate(chart_ID,name,OBJ_BITMAP_LABEL,sub_window,0,0))
     {

      //--- установим картинки для режимов On и Off 
      ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,0,file_on);

      ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,1,file_off);

      //--- установим координаты метки 
      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);
      //--- установим, какая часть изображения должна показываться в области видимости 
      //--- по умолчанию это левая верхняя область изображения; значения позволяют 
      //--- произвести сдвиг от этого угла и отобразить другую часть изображения 
      ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset);
      ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset);
      //--- установим, в каком сотоянии находится метка (нажатом или отжатом) 
      ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
      //--- установим угол графика, относительно которого будут определяться координаты точки 
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
      //--- установим способ привязки 
      ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
      //--- установим цвет рамки при включенном режиме выделения объекта 
      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
      //--- установим стиль линии рамки при включенном режиме выделения объекта 
      ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
      //--- установим размер точки привязки, с помощью которой можно перемещать объект 
      ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);
      //--- отобразим на переднем (false) или заднем (true) плане 
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      //--- включим (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);
     }
   return false;
  }
 

Вот так:

#property strict

#resource "\\Images\\kartinka1.bmp"
#resource "\\Images\\kartinka2.bmp"

#define BUTTON_NAME "Menu"

color g_clrOldColor;
string g_sCurrentFile;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   g_clrOldColor = color(ChartGetInteger(0, CHART_COLOR_BACKGROUND));
   g_sCurrentFile = "::Images\\kartinka1.bmp";
   ButtonPicture(0, BUTTON_NAME, 0, 100, 100, g_sCurrentFile, g_sCurrentFile, 16, 16, 0, 0, false, CORNER_LEFT_UPPER, ANCHOR_CENTER, clrBlack, STYLE_SOLID, 1, false, false, true, 1);
   return(INIT_SUCCEEDED);
}
void OnTick()
{

}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   ObjectDelete(0, BUTTON_NAME);
}
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
   if (id == CHARTEVENT_CHART_CHANGE)
   {
      color clrNewColor = color(ChartGetInteger(0, CHART_COLOR_BACKGROUND));
      if (clrNewColor != g_clrOldColor)
      {
         Print("Цвет фона изменился на ", ColorToString(clrNewColor));
         string strFile = (g_sCurrentFile == "::Images\\kartinka1.bmp")? "::Images\\kartinka2.bmp" : "::Images\\kartinka1.bmp";
         ObjectSetString(0, BUTTON_NAME, OBJPROP_BMPFILE, 0, strFile);
         ObjectSetString(0, BUTTON_NAME, OBJPROP_BMPFILE, 1, strFile);
         ChartRedraw();
         g_sCurrentFile = strFile;
         g_clrOldColor = clrNewColor;
      }
   }
}
bool ButtonPicture(    const long              chart_ID=0,               // ID графика 
                       const string            name="BmpLabel",          // имя метки 
                       const int               sub_window=0,             // номер подокна 
                       const int               x=0,                      // координата по оси X 
                       const int               y=0,                      // координата по оси Y 
                       const string            file_on="",               // картинка в режиме On 
                       const string            file_off="",              // картинка в режиме Off 
                       const int               width=0,                  // X-координата области видимости 
                       const int               height=0,                 // Y-координата области видимости 
                       const int               x_offset=10,              // смещение области видимости по X 
                       const int               y_offset=10,              // смещение области видимости по Y 
                       const bool              state=false,              // нажата/отжата 
                       const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // угол графика для привязки 
                       const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки  
                       const color             clr=clrRed,               // цвет рамки при выделении 
                       const ENUM_LINE_STYLE   style=STYLE_SOLID,        // стиль линии при выделении 
                       const int               point_width=1,            // размер точки перемещения 
                       const bool              back=false,               // на заднем плане 
                       const bool              selection=false,          // выделить для перемещений 
                       const bool              hidden=true,              // скрыт в списке объектов 
                       const long              z_order=0)                // приоритет на нажатие мышью 
  {
//--- сбросим значение ошибки 
   ResetLastError();
//--- создадим графическую метку 
   if(ObjectFind(chart_ID, name)==0)
      return false;

   if(ObjectCreate(chart_ID,name,OBJ_BITMAP_LABEL,sub_window,0,0))
     {

      //--- установим картинки для режимов On и Off 
      ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,0,file_on);

      ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,1,file_off);

      //--- установим координаты метки 
      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);
      //--- установим, какая часть изображения должна показываться в области видимости 
      //--- по умолчанию это левая верхняя область изображения; значения позволяют 
      //--- произвести сдвиг от этого угла и отобразить другую часть изображения 
      ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset);
      ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset);
      //--- установим, в каком сотоянии находится метка (нажатом или отжатом) 
      ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
      //--- установим угол графика, относительно которого будут определяться координаты точки 
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
      //--- установим способ привязки 
      ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
      //--- установим цвет рамки при включенном режиме выделения объекта 
      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
      //--- установим стиль линии рамки при включенном режиме выделения объекта 
      ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
      //--- установим размер точки привязки, с помощью которой можно перемещать объект 
      ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);
      //--- отобразим на переднем (false) или заднем (true) плане 
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      //--- включим (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);
     }
   return false;
  }

Результат:


 
Ihor Herasko:

Вот так:

Результат:


Спасибо большое! но возникли 2 проблемы:
1) как и у меня при смене фона --> меняется цвет кнопки, но как только мы поменяли ТФ сразу же прыгает и цвет кнопки обратно
2) Пожалуйста ответьте каким образом можно сделать чтобы менялось не при любых цветах а только так:
   2.1) когда цвет фона черный - картинка2, в остальных случаях картинка1
Спасибо

P.S я могу ошибаться но если я правильно понял вы выложили пример советника(скорее всего поэтому он у меня не кидался в индюке)
иии в советниках там по другому работает смена ТФ (опять же это слова вслух ии я могу ошибаться)
 
ares96:

Спасибо большое! но возникли 2 проблемы:
1) как и у меня при смене фона --> меняется цвет кнопки, но как только мы поменяли ТФ сразу же прыгает и цвет кнопки обратно

Потому что при смене ТФ происходит инициализация программы, будь то советник, будь то индикатор.

2) Пожалуйста ответьте каким образом можно сделать чтобы менялось не при любых цветах а только так:
   2.1) когда цвет фона черный - картинка2, в остальных случаях картинка1

Вы же сами формализовали нужное условие. В коде это будет выглядеть точно также:

   string strFile = (g_clrOldColor == C'0,0,0')? "::Images\\kartinka2.bmp" : "::Images\\kartinka1.bmp";
   ButtonPicture(0, BUTTON_NAME, 0, 100, 100, strFile, strFile, 16, 16, 0, 0, false, CORNER_LEFT_UPPER, ANCHOR_CENTER, clrBlack, STYLE_SOLID, 1, false, false, true, 1);

Полный код для индикатора, хотя он такой же, как и для советника - вместо OnTick() присутствует пустая функция OnCalculate():

#property strict

#property indicator_chart_window


#resource "\\Images\\kartinka1.bmp"
#resource "\\Images\\kartinka2.bmp"

#define BUTTON_NAME "Menu"

color g_clrOldColor;


int OnInit(void)
{
   g_clrOldColor = color(ChartGetInteger(0, CHART_COLOR_BACKGROUND));
   string strFile = (g_clrOldColor == C'0,0,0')? "::Images\\kartinka2.bmp" : "::Images\\kartinka1.bmp";
   ButtonPicture(0, BUTTON_NAME, 0, 100, 100, strFile, strFile, 16, 16, 0, 0, false, CORNER_LEFT_UPPER, ANCHOR_CENTER, clrBlack, STYLE_SOLID, 1, false, false, true, 1);
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
   ObjectDelete(0, BUTTON_NAME);
}


int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])

{
   return(rates_total);
}

void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
   if (id == CHARTEVENT_CHART_CHANGE)
   {
      color clrNewColor = color(ChartGetInteger(0, CHART_COLOR_BACKGROUND));
      if (clrNewColor != g_clrOldColor)
      {
         Print("Цвет фона изменился на ", ColorToString(clrNewColor));
         string strFile = (clrNewColor ==  C'0,0,0')? "::Images\\kartinka2.bmp" : "::Images\\kartinka1.bmp";
         ObjectSetString(0, BUTTON_NAME, OBJPROP_BMPFILE, 0, strFile);
         ObjectSetString(0, BUTTON_NAME, OBJPROP_BMPFILE, 1, strFile);
         ChartRedraw();
         g_clrOldColor = clrNewColor;
      }
   }
}


bool ButtonPicture(    const long              chart_ID=0,               // ID графика 
                       const string            name="BmpLabel",          // имя метки 
                       const int               sub_window=0,             // номер подокна 
                       const int               x=0,                      // координата по оси X 
                       const int               y=0,                      // координата по оси Y 
                       const string            file_on="",               // картинка в режиме On 
                       const string            file_off="",              // картинка в режиме Off 
                       const int               width=0,                  // X-координата области видимости 
                       const int               height=0,                 // Y-координата области видимости 
                       const int               x_offset=10,              // смещение области видимости по X 
                       const int               y_offset=10,              // смещение области видимости по Y 
                       const bool              state=false,              // нажата/отжата 
                       const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // угол графика для привязки 
                       const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки  
                       const color             clr=clrRed,               // цвет рамки при выделении 
                       const ENUM_LINE_STYLE   style=STYLE_SOLID,        // стиль линии при выделении 
                       const int               point_width=1,            // размер точки перемещения 
                       const bool              back=false,               // на заднем плане 
                       const bool              selection=false,          // выделить для перемещений 
                       const bool              hidden=true,              // скрыт в списке объектов 
                       const long              z_order=0)                // приоритет на нажатие мышью 
  {
//--- сбросим значение ошибки 
   ResetLastError();
//--- создадим графическую метку 
   if(ObjectFind(chart_ID, name)==0)
      return false;

   if(ObjectCreate(chart_ID,name,OBJ_BITMAP_LABEL,sub_window,0,0))
     {

      //--- установим картинки для режимов On и Off 
      ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,0,file_on);

      ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,1,file_off);

      //--- установим координаты метки 
      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);
      //--- установим, какая часть изображения должна показываться в области видимости 
      //--- по умолчанию это левая верхняя область изображения; значения позволяют 
      //--- произвести сдвиг от этого угла и отобразить другую часть изображения 
      ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset);
      ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset);
      //--- установим, в каком сотоянии находится метка (нажатом или отжатом) 
      ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
      //--- установим угол графика, относительно которого будут определяться координаты точки 
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
      //--- установим способ привязки 
      ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
      //--- установим цвет рамки при включенном режиме выделения объекта 
      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
      //--- установим стиль линии рамки при включенном режиме выделения объекта 
      ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
      //--- установим размер точки привязки, с помощью которой можно перемещать объект 
      ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);
      //--- отобразим на переднем (false) или заднем (true) плане 
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      //--- включим (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);
     }
   return false;
  }
 
Ihor Herasko:

Потому что при смене ТФ происходит инициализация программы, будь то советник, будь то индикатор.

Вы же сами формализовали нужное условие. В коде это будет выглядеть точно также:

Полный код для индикатора, хотя он такой же, как и для советника - вместо OnTick() присутствует пустая функция OnCalculate():

Спасибо вам огромное!!!! Всё работает идеально, так и не понял почему у меня раньше при смене ТФ картинка обратно на прежнюю становилась,


Спасибо еще раз вам, Большой человек

 
ares96:

Спасибо вам огромное!!!! Всё работает идеально, так и не понял почему у меня раньше при смене ТФ картинка обратно на прежнюю становилась,

В первой версии начальный рисунок всегда был один и тот же, не зависящий от цвета фона. Менялся только в случае смены цвета фона на любой другой. После того, как Вы точно сформулировали условие вывода того или иного рисунка, это условие было внесено. Еще раз, вот это условие:

string strFile = (g_clrOldColor == C'0,0,0')? "::Images\\kartinka2.bmp" : "::Images\\kartinka1.bmp";
 
Ihor Herasko:

В первой версии начальный рисунок всегда был один и тот же, не зависящий от цвета фона. Менялся только в случае смены цвета фона на любой другой. После того, как Вы точно сформулировали условие вывода того или иного рисунка, это условие было внесено. Еще раз, вот это условие:

Спасибо что объяснили, извените если наглею но могли бы вы еще кое в чем помочь:
Пытался по вашему примеру сделать изменение цвета у  Label но у меня не получается, или ошибки или нет ошибок и не работает

Нужно чтобы тут точно так же менялся цвет в зависимости от фона, т.е для черного фона - белый текст, для всех остальных черный
Пожалуйста помогите окончательно вот с этим

В общем вот так вывожу 
Label:

   LabelCreate(0,"label0",0,233+X,1,CORNER_LEFT_UPPER,"Статистика","Tahoma",8,White,0.0,ANCHOR_LEFT_UPPER,false,false,true,0);


bool LabelCreate(const long              chart_ID=0,               // ID графика
                 const string            name="Label",             // имя метки
                 const int               sub_window=0,             // номер подокна
                 const int               x=0,                      // координата по оси X
                 const int               y=0,                      // координата по оси Y
                 const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // угол графика для привязки
                 const string            text="Label",             // текст
                 const string            font="Arial",             // шрифт
                 const int               font_size=10,             // размер шрифта
                 const color             clr=clrRed,               // цвет
                 const double            angle=0.0,                // наклон текста
                 const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки
                 const bool              back=false,               // на заднем плане
                 const bool              selection=false,          // выделить для перемещений
                 const bool              hidden=true,              // скрыт в списке объектов
                 const long              z_order=0)                // приоритет на нажатие мышью
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим текстовую метку
   if(!ObjectCreate(chart_ID,name,OBJ_LABEL,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_CORNER,corner);
//--- установим текст
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- установим размер шрифта
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- установим угол наклона текста
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- установим способ привязки
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- установим цвет
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (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);
  }
 
У меня возникли затруднения тут:
         string strFileTX = (clrNewColor ==  C'0,0,0')? "Black : White;

\\\\\\\\\\\пример\\\\\\\\\\
         ObjectSetString(0, BUTTON_NAME, OBJPROP_BMPFILE, 0, strFile);
         ObjectSetString(0, BUTTON_NAME, OBJPROP_BMPFILE, 1, strFile);
\\\\\\\\\\\пример\\\\\\\\\\
         
и как вот тут сделать для 0 и для 1 ????
         ObjectSetInteger(0,"label0",OBJPROP_COLOR,White);  
так не работает, но и ошибок нету:
         string strFileTX = (clrNewColor ==  C'0,0,0')? White : Black;
         
         ObjectSetInteger(0,"label0",OBJPROP_COLOR, 0, White);  
         ObjectSetInteger(0,"label0",OBJPROP_COLOR, 1, Black);  
 

ares96:
У меня возникли затруднения тут:

Для этого случая:

 string strFileTX = (clrNewColor ==  C'0,0,0')? "Black : White;

         ObjectSetString(0, BUTTON_NAME, OBJPROP_BMPFILE, 0, strFile);
         ObjectSetString(0, BUTTON_NAME, OBJPROP_BMPFILE, 1, strFile);

Тут две ошибки:

  1. У объекта Label нет свойства OBJPROP_BMPFILE. Поэтому и нет смысла устанавливать такому объекту это свойство.
  2. Black и White (в новой версии MQL обозначаются как clrBlack и clrWhite соответственно) - это цвета, а не строки.

так не работает, но и ошибок нету:

А здесь нужно так:

       
ObjectSetInteger(0, "label0", OBJPROP_COLOR, (clrNewColor ==  C'0,0,0')? clrWhite : clrBlack);  
Причина обращения: