Можно ли определить длину строки OBJ_LABEL в пикселях? - страница 2

 

А кто пробовал TextGetSize(), он на на запуске в ините нормально работает? 

Есть вариант: писать шрифтом фиксированного размера типа Курьер Нью, тогда получится самостоятельно высчитать размер.

 
Taras Slobodyanik:

чтобы найти ширину текста, нужно умножить размер шрифта на -10

вы проверяли тот код который вы предложили?
сверху моя картинка - измерьте ширину и высоту надписи, и сравните с тем, что показывает ваш скрипт.

Подтверждаю, при умножении размера шрифта на -10, скрипт предложенный Igor Zakharov начинает выдавать корректные размеры для OBJ_LABEL. Без этого умножения результаты выдавались неверные.

Тестировал с различными шрифтами и различными размерами. Пиксельные замеры делал в фотошопе при помощи линейки.

Спасибо ребята!

 
leon_17:

Подтверждаю, при умножении размера шрифта на -10, скрипт предложенный Igor Zakharov начинает выдавать корректные размеры для OBJ_LABEL. Без этого умножения результаты выдавались неверные.

Тестировал с различными шрифтами и различными размерами. Пиксельные замеры делал в фотошопе при помощи линейки.

Спасибо ребята!

А проверить свойство OBJ_LABEL не получилось?)))

OBJPROP_XSIZE

Ширина объекта по оси X в пикселях. Задается для объектов OBJ_LABEL (read-only), OBJ_BUTTON, OBJ_BITMAP, OBJ_BITMAP_LABEL, OBJ_EDIT, OBJ_RECTANGLE_LABEL.

int

 
Dmitry Fedoseev:

А кто пробовал TextGetSize(), он на на запуске в ините нормально работает?

А что может помешать? Ведь это не связано с подгрузкой котировок.

 
Alexey Viktorov:

А проверить свойство OBJ_LABEL не получилось?)))

извиняюсь, я всех с истинного пути сбил... я попутал OBJ_LABEL и OBJ_TEXT

 
Alexey Viktorov:

А проверить свойство OBJ_LABEL не получилось?)))

OBJPROP_XSIZE

Ширина объекта по оси X в пикселях. Задается для объектов OBJ_LABEL (read-only), OBJ_BUTTON, OBJ_BITMAP, OBJ_BITMAP_LABEL, OBJ_EDIT, OBJ_RECTANGLE_LABEL.

int

Особо не доводилось этим пользоваться, но когда делаю так:

long x_size,y_size;

   if(ObjectFind(Obj_text)!=-1) // Если объект есть
     {
      x_size=ObjectGetInteger(0,Obj_text,OBJPROP_XSIZE); // Получаем размер объекта в ширину

      y_size=ObjectGetInteger(0,Obj_text,OBJPROP_YSIZE); // Получаем размер объекта в высоту
     }
   Alert("Размер объекта по оси X - ",x_size,"\nРазмер объекта по оси Y - ",y_size);

Получаю почему-то нули... при этом свойство OBJPROP_FONTSIZE например работает корректно. В чем проблема, пока не догадался..

 
leon_17:

Особо не доводилось этим пользоваться, но когда делаю так:

Получаю почему-то нули... при этом свойство OBJPROP_FONTSIZE например работает корректно. В чем проблема, пока не догадался..

Проблема в том, что объекта OBJ_TEXT нет в перечисленных в среднем столбце части таблицы.

 
Alexey Viktorov:

Проблема в том, что объекта OBJ_TEXT нет в перечисленных в среднем столбце части таблицы.

Я не создавал объект типа OBJ_TEXT 

Вот полный код:
input string Text="Some text";

input int font_size=14;

input string font_name="Arial";


//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string Obj_text="text";


   if(ObjectFind(Obj_text)!=-1)
      ObjectDelete(Obj_text);     // удалять, только если объект существует

//---------------------------------------------------------------


   if(ObjectFind(Obj_text)==-1) // Если объекта нет..
     {
      ObjectCreate(Obj_text,OBJ_LABEL,0,0,0);                               // Создаём новый объект
      ObjectSetInteger(0,Obj_text,OBJPROP_CORNER,CORNER_LEFT_UPPER);        // Угол привязки
      ObjectSetInteger(0,Obj_text,OBJPROP_XDISTANCE,200);                   // Положение объекта Координата Х
      ObjectSetInteger(0,Obj_text,OBJPROP_YDISTANCE,200);                   // Положение объекта Координата Y
     }
   ObjectSetText(Obj_text,Text,font_size,font_name,clrWhite);      // Текстовое описание объекта

//---------------------------------------------------------------

   long x_size,y_size;

   if(ObjectFind(Obj_text)!=-1) // Если объект есть
     {
      x_size=ObjectGetInteger(0,Obj_text,OBJPROP_XSIZE); // Получаем размер объекта в ширину

      y_size=ObjectGetInteger(0,Obj_text,OBJPROP_YSIZE); // Получаем размер объекта в высоту
     }
   Alert("Размер объекта по оси X - ",x_size,"\nРазмер объекта по оси Y - ",y_size);
}
 
leon_17:
Я не создавал объект типа OBJ_TEXT 

Вот полный код:

Обратите внимание на то, что я отвечал только на ваши методы проверки правильности получения ширины лейбла. Вместо фотошопа можно было использовать свойство OBJPROP_XSIZE

 
Alexey Viktorov:

Обратите внимание на то, что я отвечал только на ваши методы проверки правильности получения ширины лейбла. Вместо фотошопа можно было использовать свойство OBJPROP_XSIZE

Как использовать? Я пробовал, получил нули. На случай, если сделал что-то неправильно и привел код.
Причина обращения: