Особенности языка mql4, тонкости и приёмы работы - страница 16

 
надеюсь вы друзья)
 
Fast528:
надеюсь вы друзья)

"Войны Титанов" не будет.

 
Надеюсь ветка не умерла. У меня следующая проблема: монитор 4к, следовательно в Windows у меня шрифт увеличен (размер 200%). Когда делаешь объекты текста для индикаторов, размер текста берется исходя из настроек Windows и тоже масштабируется, в итоге если делать что-то, что нормально выглядит на обычной системе, то на моем компьютере текст залазит друг на друга, а если делать нормально для меня, то на обычных настройках текст слишком мелкий. Я сделала input настройку в индикаторе, чтобы пользователь сам выбирал масштабированный или не масштабированный вариант, но это мне не очень нравится.

Есть ли способ прямо из программы узнать какой шрифт в данный момент в windows (увеличенный или нет) и делать эту поправку в коде, не трогая юзеров? Просто у некоторых бывает монитор 4к с масштабированным текстом и большинство индикаторов (где используется текст) из маркета у них выглядит убого и страшно.
 
Olga Miakhovich:
Надеюсь ветка не умерла. У меня следующая проблема: монитор 4к, следовательно в Windows у меня шрифт увеличен (размер 200%). Когда делаешь объекты текста для индикаторов, размер текста берется исходя из настроек Windows и тоже масштабируется, в итоге если делать что-то, что нормально выглядит на обычной системе, то на моем компьютере текст залазит друг на друга, а если делать нормально для меня, то на обычных настройках текст слишком мелкий. Я сделала input настройку в индикаторе, чтобы пользователь сам выбирал масштабированный или не масштабированный вариант, но это мне не очень нравится.

Есть ли способ прямо из программы узнать какой шрифт в данный момент в windows (увеличенный или нет) и делать эту поправку в коде, не трогая юзеров? Просто у некоторых бывает монитор 4к с масштабированным текстом и большинство индикаторов (где используется текст) из маркета у них выглядит убого и страшно.

Может стоит перейти на работу с ресурсами, или с CCanvas?

Тогда там можно задавать размеры шрифта в соответствии с настройками операционной системы.

Почитайте о TextOut(), TextSetFont()

Документация по MQL5: Графические объекты / TextSetFont
Документация по MQL5: Графические объекты / TextSetFont
  • www.mql5.com
Устанавливает шрифт для вывода текста методами рисования и возвращает результат успешности этой операции. По умолчанию используется шрифт Arial и размер -120 (12 pt). [in]  Размер шрифта, который может задаваться положительными и отрицательными значениями. При положительных значениях размер выводимого текста не зависит от настроек размеров...
 
Все, решение найдено. Для тех, кому интересно какое: использовать функцию TerminalInfoInteger(TERMINAL_SCREEN_DPI); При стандартном масштабировании будет 96. Если в 2 раза больше, то и масштабирование в 2 раза соответственно.
 
Olga Miakhovich:
Все, решение найдено. Для тех, кому интересно какое: использовать функцию TerminalInfoInteger(TERMINAL_SCREEN_DPI); При стандартном масштабировании будет 96. Если в 2 раза больше, то и масштабирование в 2 раза соответственно.

Решение есть в справке

Пример вычисления коэффициента масштабирования:

//--- создаём кнопку шириной 1.5 дюйма на экране
int screen_dpi = TerminalInfoInteger(TERMINAL_SCREEN_DPI); // получим DPI монитора пользователя
int base_width = 144;                                      // базовая ширина в экранных точках для стандартных мониторов c DPI=96
int width      = (button_width * screen_dpi) / 96;         // вычислим ширину кнопки для монитора пользователя (с учётом его DPI)
...
 
//--- вычисление коэффициента масштабирования в процентах
int scale_factor=(TerminalInfoInteger(TERMINAL_SCREEN_DPI) * 100) / 96;
//--- использование коэффициента масштабирования
width=(base_width * scale_factor) / 100;

 
Vladimir Pastushak:

Решение есть в справке

ага, только оно не для шрифтов.

Olga Miakhovich:
Все, решение найдено.

правда? масштабирование влияет на dpi монитора?

 
Особенности ArrayResize для многомерных массивов
void OnStart()
{
  int Array[][2];
  
  Print(ArrayResize(Array, 7)); // MQL5 - 7, MQL4 - 14
  Print(ArraySize(Array));      // 14
}
 
Ну, да. 
Причина обращения: