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

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

Попробуйте поставить точку останова и пройдите код в режиме Debug пошагово.

 
Taras Slobodyanik:

это для канваса

пс. хотя в справке есть примечание:

Исходное значение: 10; умножаем на -10, получаем -100. И? ... 

 

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

      int iw=0,ih=0;

      TextSetFont(sFontName,iFontSize);//задаем шрифт и его размеры для текста
      TextGetSize("W",iw,ih);//W является самым широким символом его размеры берем за эталон.

      int iLen=StringLen(sLine);//определяем длину текста в символах
      int iWidth=iw*iLen;//искомая ширина с нужным запасом межсимвольного интервала.

Естественно не описаны в примере переменные это входные данные: строка, шрифт и его размер.

 
Алексей Тарабанов:

Исходное значение: 10; умножаем на -10, получаем -100. И? ... 

и передаем это значение в функцию TextSetFont.
отрицательный размер рассчитывается функцией по-другому.

Если размер задается отрицательным числом, то указанный размер предполагается заданным в десятых долях логического пункта (значение -350 равно 35 логических пунктов) и делится на 10, а затем полученное значение преобразуется в физические единицы измерения устройства (пиксели) и соответствует абсолютному значению высоты символа из доступных шрифтов. Чтобы получить на экране текст такого же размера, как и в объекте OBJ_LABEL, возьмите указанный в свойствах объекта размер шрифта и умножьте на -10.
TextSetFont(fontName,fontSize*-10,flags,orientation);
TextGetSize(text,width,height);
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
При создании графического объекта функцией ObjectCreate() необходимо указать тип создаваемого объекта, который может принимать одно из значений перечисления ENUM_OBJECT. Дальнейшие уточнения свойств созданного объекта возможно с помощью функций по работе с графическими объектами.
 
Alexey Viktorov:

Попробуйте поставить точку останова и пройдите код в режиме Debug пошагово.

Чудны дела твои господи - с отладчиком все работает, без отладчика - нет.

Нифига не понимаю o_0

p.s. спасибо за пояснение, как использовать!

 
leon_17:

Чудны дела твои господи - с отладчиком все работает, без отладчика - нет.

Нифига не понимаю o_0

p.s. спасибо за пояснение, как использовать!

Никаких чудес. Не надо удалять объект, или хотя-бы обновите график после создания объекта.

 
Alexey Viktorov:

Никаких чудес. Не надо удалять объект, или хотя-бы обновите график после создания объекта.

Перерисовка графика не помогает, а вот Sleep в 1 секунду после создания объекта все решает. Походу на момент снятия показаний с объекта, он просто не успевает еще нарисоваться.  Еще раз спасибо за помощь в понимании сего процесса! Буду иметь ввиду...
 
Alexandr Gavrilin:

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

Естественно не описаны в примере переменные это входные данные: строка, шрифт и его размер.

Вот спасибо! Тоже эта задача появилась как раз сегодня и не пришлось благодаря вашему ответу долго искать. Все приспособил и все работает как нужно )

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