Ошибки, баги, вопросы - страница 1930

 

пуши странные нынче пошли: 

uest/302788

request/302788

как могу догадаться, это меня в кандидаты записали и прокоментировали в том же заказе. 

Но сообщения прям как для кодеров)

 

Из документации

 

ENUM_BASE_CORNER

Идентификатор

Описание

CORNER_LEFT_UPPER

Центр координат в левом верхнем углу графика

CORNER_LEFT_LOWER

Центр координат в левом нижнем углу графика

CORNER_RIGHT_LOWER

Центр координат в правом нижнем углу графика

CORNER_RIGHT_UPPER

Центр координат в правом верхнем углу графика

Вопрос: Почему нельзя было составить таблицу в цифровом порядке? ставишь 1 - и вместо ожидаемого "Центр координат в левом верхнем углу графика"  получаешь "Центр координат в правом нижнем углу графика".

Получается сейчас так

1 - Центр координат в левом нижнем углу графика
2 - Центр координат в правом нижнем углу графика
3 - Центр координат в правом верхнем углу графика
4 - Центр координат в левом верхнем углу графика

 
Aleksey Vyazmikin:

Из документации

 

ENUM_BASE_CORNER

Идентификатор

Описание

CORNER_LEFT_UPPER

Центр координат в левом верхнем углу графика

CORNER_LEFT_LOWER

Центр координат в левом нижнем углу графика

CORNER_RIGHT_LOWER

Центр координат в правом нижнем углу графика

CORNER_RIGHT_UPPER

Центр координат в правом верхнем углу графика

Вопрос: Почему нельзя было составить таблицу в цифровом порядке? ставишь 1 - и вместо ожидаемого "Центр координат в левом верхнем углу графика"  получаешь "Центр координат в правом нижнем углу графика".

Получается сейчас так

1 - Центр координат в левом нижнем углу графика
2 - Центр координат в правом нижнем углу графика
3 - Центр координат в правом верхнем углу графика
4 - Центр координат в левом верхнем углу графика

С нуля подсчёт начинается же.

Что мешает вместо цифры вводить CORNER_LEFT_UPPER ? Для того и сделаны перечисления, чтобы вы могли не задумываться о цифрах.

 

В хелпе

MT4:

Для объектов с фиксированными размерами: OBJ_BUTTON, OBJ_RECTANGLE_LABEL и OBJ_EDIT свойства OBJPROP_XDISTANCE и OBJPROP_YDISTANCE задают положение левой верхней точки объекта относительно угла графика (OBJPROP_CORNER), от которого будут отсчитываться координаты X и Y в пикселях.

 


MT5:

Для объектов с фиксированными размерами: OBJ_BUTTON, OBJ_RECTANGLE_LABEL, OBJ_EDIT и OBJ_CHART свойства OBJPROP_XDISTANCE и OBJPROP_YDISTANCE задают положение левой верхней точки объекта относительно угла графика (OBJPROP_CORNER), от которого будут отсчитываться координаты X и Y в пикселях.

Казалось бы одно и то же, вот только в MT4 нет левой точки объекта для OBJ_LABEL - есть правая, но не это вызвало мой гнев, дело в том, что старый код MT4 с использованием ObjectSet позволял разместить объекты относительно краев (углов) - для объектов в левой части расчет пикселей шел от первого символа, для правой части - от последнего символа, а новый вариант всегда делает расчет отступа от первого символа, что затрудняет позиционирование лейблов с текстом, так как не всегда известно, сколько будет текстовых символов. Прошу разработчиков добавить выбор способа выравнивания текста!

//+------------------------------------------------------------------+
//|Функция вывода информации на экран -- Старый вариант              |
//+------------------------------------------------------------------+

void Label_MQL4(string _name,int _window,int _x,int _y,string _text,int _font,color _color,int corner)
  {
   ObjectDelete(_name);
   ObjectCreate(_name,OBJ_LABEL,_window,0,0);
   ObjectSet(_name,OBJPROP_CORNER,corner);
   ObjectSet(_name,OBJPROP_XDISTANCE,_x);
   ObjectSet(_name,OBJPROP_YDISTANCE,_y);
   ObjectSetText(_name,_text,_font,"Arial",_color);
  }
  
//+------------------------------------------------------------------+
//|Функция вывода информации на экран -- Новый вариант               |
//+------------------------------------------------------------------+
void Label_MQL5(string _name,int _window,int _x,int _y,string _text,int _font,color _color,int corner)
  {
   //corner=4;
   ObjectDelete(0,_name);
   ObjectCreate(0,_name,OBJ_LABEL,_window,0,0);
   ObjectSetInteger(0,_name,OBJPROP_CORNER,corner);
   ObjectSetInteger(0,_name,OBJPROP_XDISTANCE,_x);
   ObjectSetInteger(0,_name,OBJPROP_YDISTANCE,_y);
   ObjectSetText(_name,_text,_font,"Arial",_color);
  }  


Если кто знает, как в MT5 получать выравнивание по правому и левому краю, то прошу Вас поделиться соответствующей функцией!

 
Artyom Trishkin:

С нуля подсчёт начинается же.

Что мешает вместо цифры вводить CORNER_LEFT_UPPER ? Для того и сделаны перечисления, чтобы вы могли не задумываться о цифрах.

 С нуля? Ну, хорошо - пусть с нуля - не учел - но всё ж равно не получается!

Потому что мне так понятней и раньше использовал...

 
Aleksey Vyazmikin:

 С нуля? Ну, хорошо - пусть с нуля - не учел - но всё ж равно не получается!

Потому что мне так понятней и раньше использовал...

Мне за вас передвинуть вверх пункт списка, который вы пытаетесь обозначить цифрой 4, которой там нету? Он становится нулевым - и всё на местах.

 

Утро вечера мудреннее... :)

 
Aleksey Vyazmikin:

В хелпе

MT4:

Для объектов с фиксированными размерами: OBJ_BUTTON, OBJ_RECTANGLE_LABEL и OBJ_EDIT свойства OBJPROP_XDISTANCE и OBJPROP_YDISTANCE задают положение левой верхней точки объекта относительно угла графика (OBJPROP_CORNER), от которого будут отсчитываться координаты X и Y в пикселях.

 


MT5:

Для объектов с фиксированными размерами: OBJ_BUTTON, OBJ_RECTANGLE_LABEL, OBJ_EDIT и OBJ_CHART свойства OBJPROP_XDISTANCE и OBJPROP_YDISTANCE задают положение левой верхней точки объекта относительно угла графика (OBJPROP_CORNER), от которого будут отсчитываться координаты X и Y в пикселях.

Казалось бы одно и то же, вот только в MT4 нет левой точки объекта для OBJ_LABEL - есть правая, но не это вызвало мой гнев, дело в том, что старый код MT4 с использованием ObjectSet позволял разместить объекты относительно краев (углов) - для объектов в левой части расчет пикселей шел от первого символа, для правой части - от последнего символа, а новый вариант всегда делает расчет отступа от первого символа, что затрудняет позиционирование лейблов с текстом, так как не всегда известно, сколько будет текстовых символов. Прошу разработчиков добавить выбор способа выравнивания текста!


Если кто знает, как в MT5 получать выравнивание по правому и левому краю, то прошу Вас поделиться соответствующей функцией!

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

Для объектов OBJ_LABEL, OBJ_BITMAP_LABEL и OBJ_RECTANGLE_LABEL можно задавать угол графика, относительно которого позиционируется точка привязки объекта. Этот угол устанавливается через свойство объекта OBJPROP_CORNER, которое может иметь одно из четырех значений перечисления ENUM_BASE_CORNER:

Идентификатор

Описание

CORNER_LEFT_UPPER

Координаты точки привязки заданы относительно левого верхнего угла графика

CORNER_LEFT_LOWER

Координаты точки привязки заданы относительно левого нижнего угла графика

CORNER_RIGHT_LOWER

Координаты точки привязки заданы относительно правого нижнего угла графика

CORNER_RIGHT_UPPER

Координаты точки привязки заданы относительно правого верхнего угла графика

Положение самой точки привязки объекта задается свойством OBJPROP_ANCHOR и может быть одним из 9-ти значений перечисления ENUM_ANCHOR_POINT:

Идентификатор

Описание

ANCHOR_LEFT_UPPER

Точка привязки в левом верхнем углу

ANCHOR_LEFT

Точка привязки слева по центру

ANCHOR_LEFT_LOWER

Точка привязки в левом нижнем углу

ANCHOR_LOWER

Точка привязки снизу по центру

ANCHOR_RIGHT_LOWER

Точка привязки в правом нижнем углу

ANCHOR_RIGHT

Точка привязки справа по центру

ANCHOR_RIGHT_UPPER

Точка привязки в правом верхнем углу

ANCHOR_UPPER

Точка привязки сверху по центру

ANCHOR_CENTER

Точка привязки строго по центру объекта

 
Artyom Trishkin:

Мне за вас передвинуть вверх пункт списка, который вы пытаетесь обозначить цифрой 4, которой там нету? Он становится нулевым - и всё на местах.

 

Конечно я всё передвинул - может туплю..



void OnStart()
  {
      Label("0",//Название
            0,       //Окно
            10,      //X
            32,      //Y
            "0 - Центр координат в левом верхнем углу графика",
            10,//Размер шрифта
            Yellow,//Цвет шрифта
            0        //Выбор угла: 3 - нижний правый, 1 - верхний правый. 2 - нижний левый, 4 - верхний левый                   
            );     
      Label("1",//Название
            0,       //Окно
            10,      //X
            32,      //Y
            "1 - Центр координат в левом нижнем углу графика",
            10,//Размер шрифта
            Yellow,//Цвет шрифта
            1        //Выбор угла: 3 - нижний правый, 1 - верхний правый. 2 - нижний левый, 4 - верхний левый                   
            );     
      Label("2",//Название
            0,       //Окно
            10,      //X
            32,      //Y
            "2 - Центр координат в правом нижнем углу графика",
            10,//Размер шрифта
            Yellow,//Цвет шрифта
            2        //Выбор угла: 3 - нижний правый, 1 - верхний правый. 2 - нижний левый, 4 - верхний левый                   
            );
      Label("3",//Название
            0,       //Окно
            10,     //X
            32,      //Y
            "3 - Центр координат в правом верхнем углу графика",
            10,//Размер шрифта
            Yellow,//Цвет шрифта
            3      //Выбор угла: 3 - нижний правый, 1 - верхний правый. 2 - нижний левый, 4 - верхний левый                   
            ); 

  }

//+------------------------------------------------------------------+
//|Функция вывода информации на экран -- Старый вариант              |
//+------------------------------------------------------------------+
void Label(string _name,int _window,int _x,int _y,string _text,int _font,color _color,int corner)
  {
   ObjectDelete(_name);
   ObjectCreate(_name,OBJ_LABEL,_window,0,0);
   ObjectSet(_name,OBJPROP_CORNER,corner);
   ObjectSet(_name,OBJPROP_XDISTANCE,_x);
   ObjectSet(_name,OBJPROP_YDISTANCE,_y);
   ObjectSetText(_name,_text,_font,"Arial",_color);
  }
/*
//+------------------------------------------------------------------+
//|Функция вывода информации на экран -- Новый вариант               |
//+------------------------------------------------------------------+
void Label(string _name,int _window,int _x,int _y,string _text,int _font,color _color,int corner)
  {
   //corner=4;
   ObjectDelete(0,_name);
   ObjectCreate(0,_name,OBJ_LABEL,_window,0,0);
   ObjectSetInteger(0,_name,OBJPROP_CORNER,corner);
   ObjectSetInteger(0,_name,OBJPROP_XDISTANCE,_x);
   ObjectSetInteger(0,_name,OBJPROP_YDISTANCE,_y);
   ObjectSetText(_name,_text,_font,"Arial",_color);
  }
*/   
 
Artyom Trishkin:

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

Для объектов OBJ_LABEL, OBJ_BITMAP_LABEL и OBJ_RECTANGLE_LABEL можно задавать угол графика, относительно которого позиционируется точка привязки объекта. Этот угол устанавливается через свойство объекта OBJPROP_CORNER, которое может иметь одно из четырех значений перечисления ENUM_BASE_CORNER:

Идентификатор

Описание

CORNER_LEFT_UPPER

Координаты точки привязки заданы относительно левого верхнего угла графика

CORNER_LEFT_LOWER

Координаты точки привязки заданы относительно левого нижнего угла графика

CORNER_RIGHT_LOWER

Координаты точки привязки заданы относительно правого нижнего угла графика

CORNER_RIGHT_UPPER

Координаты точки привязки заданы относительно правого верхнего угла графика

Положение самой точки привязки объекта задается свойством OBJPROP_ANCHOR и может быть одним из 9-ти значений перечисления ENUM_ANCHOR_POINT:

Идентификатор

Описание

ANCHOR_LEFT_UPPER

Точка привязки в левом верхнем углу

ANCHOR_LEFT

Точка привязки слева по центру

ANCHOR_LEFT_LOWER

Точка привязки в левом нижнем углу

ANCHOR_LOWER

Точка привязки снизу по центру

ANCHOR_RIGHT_LOWER

Точка привязки в правом нижнем углу

ANCHOR_RIGHT

Точка привязки справа по центру

ANCHOR_RIGHT_UPPER

Точка привязки в правом верхнем углу

ANCHOR_UPPER

Точка привязки сверху по центру

ANCHOR_CENTER

Точка привязки строго по центру объекта

 

Спасибо, завтра постараюсь сообразить...