MQL4. табуляция в Print() и длина строки в пикселах

 

Приветствую!
Два вопроса в одном:
1. Как реализовать табуляцию для Print()?
2. Как узнать длину строки в пикселах? 

Задача: получить вывод в виде таблицы:

MODE_MARGINREQUIRED       = 1164.32    Размер свободных средств, необходимых для открытия 1 лота на покупку

MODE_MARGINHEDGED          = 0              Маржа, взимаемая с перекрытых ордеров в расчете на 1 лот

MODE_MARGINMAINTENANCE = 0              Размер залоговых средств для поддержки открытых ордеров в расчете на 1 лот

MODE_MARGININIT                = 0              Начальные залоговые требования для 1 лота

MODE_MARGINCALCMODE      = 0              Способ расчета залоговых средств. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD на индексы

MODE_PROFITCALCMODE       = 0              Способ расчета прибыли. 0 - Forex; 1 - CFD; 2 - Futures


Подобная тема для Comment() обсуждалась здесь - https://www.mql5.com/ru/forum/122109/page6

Почему-то '\t' не работает - https://docs.mql4.com/ru/basis/types/integer/symbolconstants


Скрипт с попыткой табулирования пробелами и результат:

Результат

Что за ерунда с символом табуляции "\t" ?
Что за ерунда с символом табуляции "\t" ?
  • 2011.06.29
  • www.mql5.com
Написал идикатор решил выводимую информацию через вывести в удобочитаемом виде с символами табуляции в итоге получилась ерунда...
Файлы:
sTest.mq4  16 kb
 
sled:

Приветствую!
Два вопроса в одном:
1. Как реализовать табуляцию для Print()?
2. Как узнать длину строки в пикселах? 

Задача: получить вывод в виде таблицы:

MODE_MARGINREQUIRED       = 1164.32    Размер свободных средств, необходимых для открытия 1 лота на покупку

MODE_MARGINHEDGED          = 0              Маржа, взимаемая с перекрытых ордеров в расчете на 1 лот

MODE_MARGINMAINTENANCE = 0              Размер залоговых средств для поддержки открытых ордеров в расчете на 1 лот

MODE_MARGININIT                = 0              Начальные залоговые требования для 1 лота

MODE_MARGINCALCMODE      = 0              Способ расчета залоговых средств. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD на индексы

MODE_PROFITCALCMODE       = 0              Способ расчета прибыли. 0 - Forex; 1 - CFD; 2 - Futures


Подобная тема для Comment() обсуждалась здесь - https://www.mql5.com/ru/forum/122109/page6

Почему-то '\t' не работает - https://docs.mql4.com/ru/basis/types/integer/symbolconstants

Использовать PrintFormat и задействовать флаги выравнивания и ширины полей

PrintFormat("%15s = %f ","MODE_MARGIN_REQUIRED",1164.32);

 
Maxim Kuznetsov:

Использовать PrintFormat и задействовать флаги выравнивания и ширины полей

PrintFormat("%15s = %f ","MODE_MARGIN_REQUIRED",1164.32);

Спасибо, добрый человек!

Кое-что проясняется, буду дальше курить.


МетаКвотавцев понять и простить бы, но даже с первым не получается!   Вот как понять - https://docs.mql4.com/ru/common/printformat?!   Примеров нормальных и наглядных жалко?!


Сишная справка по printf() куда более понятная - https://cpp.com.ru/shildt_spr_po_c/08/0804.html

PrintFormat - Общие функции - Справочник MQL4
PrintFormat - Общие функции - Справочник MQL4
  • docs.mql4.com
Количество, порядок и тип параметров должны точно соответствовать составу спецификаторов, в противном случае результат печати неопределён. Вместо функции PrintFormat() можно использовать функцию Если за строкой формата следуют еще параметры, то эта строка должна содержать спецификации формата, определяющие формат вывода этих параметров...
 
Maxim Kuznetsov:

Использовать PrintFormat и задействовать флаги выравнивания и ширины полей

PrintFormat("%15s = %f ","MODE_MARGIN_REQUIRED",1164.32);

Ровнее не стала табличка, табуляции нет. При одинаковой строке форматирования: 

"--> %30s = %-10s:   %20s = %-10s:   %20s = %-30s"

в коде:

   for(int i=0; i<GlobalVariablesTotal(); i++)
      PrintFormat("--> %30s = %-10s:   %20s = %-10s:   %20s = %-30s",
                  "GlobalVariableName(" + (string)i + ")", (string)GlobalVariableName(i),
                  "GlobalVariableGet", (string)GlobalVariableGet(GlobalVariableName(i)),
                  "GlobalVariableTime", (string)GlobalVariableTime(GlobalVariableName(i)));

   for(int i=0; i<SymbolsTotal(false); i++)
      if(StringFind(SymbolName(i, false), "USD") >= 0)
         PrintFormat("--> %30s = %-10s:   %20s = %-10s:   %20s = %-30s",
             (string)SymbolName(i, false),  (string)StringFind(SymbolName(i, false), "USD"),
            "MODE_PROFITCALCMODE - ", (string)MarketInfo(_Symbol, MODE_PROFITCALCMODE),
            "MODE_MARGINCALCMODE - ", (string)MarketInfo(_Symbol, MODE_MARGINCALCMODE)
         );

Результат весьма кривой, табуляцией не пахнет к сожалению:


Печаль....
 
sled:

Ровнее не стала табличка, табуляции нет. При одинаковой строке форматирования: 

в коде:

Результат весьма кривой, табуляцией не пахнет к сожалению:


Печаль....
а зачем Вам на нули смотреть?
 
sled:

Ровнее не стала табличка, табуляции нет. При одинаковой строке форматирования: 

в коде:

Результат весьма кривой, табуляцией не пахнет к сожалению:


Печаль....

но ведь ровнее стало чем было ? :-)

1. Таблица (журнал) выводится шрифтом с не-фиксированным размером. Вожет быть где-то в настройках темы, можно задать шрифт Courier например

2. Свои журналы лучше писать в свои файлы, а в общий журнал только действительно важное. 

 
Renat Akhtyamov:
а зачем Вам на нули смотреть?
тема не про нули
 
Maxim Kuznetsov:

но ведь ровнее стало чем было ? :-)

1. Таблица (журнал) выводится шрифтом с не-фиксированным размером. Вожет быть где-то в настройках темы, можно задать шрифт Courier например

2. Свои журналы лучше писать в свои файлы, а в общий журнал только действительно важное. 

Нет, не ровнее, просто там были заглавные символы и ширина сильно менялась от кол-ва символов "I".

Да, второй вариант видимо правильный.

А решение могло бы быть только если знать ширину (допустим в пикселях) для всех символов и парсить каждую строку, тогда бы получилось.

 
sled:

А решение могло бы быть только если знать ширину (допустим в пикселях) для всех символов и парсить каждую строку, тогда бы получилось.

Нет, все равно не получилось бы подстроить произвольный текст.

Пишите в файл, проще всего.

 
ps: в МТ5 сделали моноширинный шрифт в журнале )
 
sled:
тема не про нули
Тогда используйте документацию про создание графических объектов текст и все будет красиво