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

 

Спасибо что ответили еще раз, подскажите куда вставить:

       
ObjectSetInteger(0, "label0", OBJPROP_COLOR, (clrNewColor ==  C'0,0,0')? clrWhite : clrBlack);  

в 

bool LabelCreate

или же где вывожу на экран:

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

или где?

 
Ihor Herasko:

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

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

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

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

Пожалуйста ответьте

 
ares96:

Спасибо что ответили еще раз, подскажите куда вставить:

Везде, где нужна реакция на цвет фона.

 
ares96:

Пожалуйста ответьте

Я ведь не сижу на форуме в ожидании чьих-либо вопросов. Есть свободное время - зашел, посмотрел.

 
Ihor Herasko:

Везде, где нужна реакция на цвет фона.

как правильно написать??

   LabelCreate(0,"label0",0,233+X,1,CORNER_LEFT_UPPER,"Статистика","Tahoma",8,White,0.0,ANCHOR_LEFT_UPPER,false,false,true,0);
   ObjectSetInteger(0, "label0", OBJPROP_COLOR, (clrNewColor ==  C'0,0,0')? clrWhite : clrBlack);  

так???
У меня в первой строчки стоит белый цвет, White

а ниже он меняется, так правильно будет или как? Жду вашего ответа, Спасибо
 
ares96:

как правильно написать??

Для начала нужно знать, что такое LabelCreate(). В документации такой функции нет, значит, пользовательская.

Но раз в нее передается цвет, то не нужно передавать в нее результат выполнения другой функции. Достаточно передать нужный цвет (белый или черный), который зависит от цвета текущего фона.

 
Ihor Herasko:

Для начала нужно знать, что такое LabelCreate(). В документации такой функции нет, значит, пользовательская.

Но раз в нее передается цвет, то не нужно передавать в нее результат выполнения другой функции. Достаточно передать нужный цвет (белый или черный), который зависит от цвета текущего фона.

я на 2-й страничик оставил:

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);
  }


тут:

//--- установим цвет
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

за место этого мне поставить это?

   ObjectSetInteger(chart_ID, name, OBJPROP_COLOR, (clrNewColor ==  C'0,0,0')? clrWhite : clrBlack);  


Если да тогда как выводить?

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

тут присутствует цвет белый,как быть?
Пожалуйста объясните и для текстовой метки
Спасибо

 
ares96:

за место этого мне поставить это?

Да.

Если да тогда как выводить?

тут присутствует цвет белый,как быть?

Просто поставить условие (тернарный оператор): если фон черный, то передать белый цвет, иначе - черный.

 
Ihor Herasko:

Да.

Просто поставить условие (тернарный оператор): если фон черный, то передать белый цвет, иначе - черный.

Спасибо за ответ, пожалуйста для "тыпых" как это условие поставить??? или вы про это?

   ObjectSetInteger(chart_ID, name, OBJPROP_COLOR, (clrNewColor ==  C'0,0,0')? clrWhite : clrBlack);  

------
Это поставил, далее как мне вывести?

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

тут белый остаётся или вы про то что тут нужно условии еще поставить, или же как есть так и выводить эту строчку

 
ares96:

тут белый остаётся или вы про то что тут нужно условии еще поставить, или же как есть так и выводить эту строчку

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

P. S. В моем предыдущем сообщении (и даже в текущем) автоматически вставлена ссылка на описание тернарного оператора.

Причина обращения: