TextSetFont не работает с ресурсами в MT4

 
TextSetFont не работает с ресурсами в MT4. Полдня промучился пробуя разные варианты всё впустую, всегда выводит текст в Arial, никаких ошибок при этом нет. Да и вообще ни один вывод текста не принимает шрифты из ресурсов, хоть лейблы стандартные хоть текст.
 
А подскажите где подробнее узнать об этой функции, да и вообще о графике в целом(пока для mql4). В справочнике вообще непонятно
 
Alexey Valeev:
TextSetFont не работает с ресурсами ни в MT4 ни в MT5. Раньше хоть в MT5 работало, а сейчас ни там ни там, полдня промучился пробуя разные варианты всё впустую, всегда выводит текст в Arial, никаких ошибок при этом нет. Да и вообще ни один вывод текста не принимает шрифты из ресурсов, хоть лейблы стандартные хоть текст.

Обычно постояльцы форума в таких случаях задают вопрос - а где код для воспроизведения?

 
Stanislav Korotky #:

Обычно постояльцы форума в таких случаях задают вопрос - а где код для воспроизведения?

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

Шрифт как ресурс не работает в МТ4
Шрифт как ресурс не работает в МТ4
  • 2019.08.08
  • www.mql5.com
Загружаю шрифт В итоге получаю текст написанный ариалом. Система просто игнорит указание на шрифт...
 
В МТ5 точно работает.
 
Vasiliy Sokolov #:
В МТ5 точно работает.

Точно, только что проверил работает в МТ5 но не работало же! Вот чудеса! Или терминал просто надо было перезапустить. Но в МТ4 не работает.

 
Alexey Valeev #:

Точно, только что проверил работает в МТ5 но не работало же! Вот чудеса! Или терминал просто надо было перезапустить. Но в МТ4 не работает.

У меня в MT5 не работает. Вообще, вместо имени шрифта любую белиберду можно передать, TextSetFont() молчит и всегда возвращает истину.

void OnStart()
{
        ResetLastError();
        string font = "blablabla";
        bool result = TextSetFont(font, 12 * -10, FW_DONTCARE);

        if(!result) Print("Set font ", font, " failed"); // no message!
        Print("Error #", _LastError); // 0!

        // label-object creation test
        string obj_name = "TestObject";
        if(!ObjectCreate(0, obj_name, OBJ_LABEL, 0, 0, 0))
        {
                Print(__FUNCTION__, ": label creation failed! Error = ", _LastError);
                return;
        }
        ObjectSetString(0, obj_name, OBJPROP_FONT, font);
        ObjectSetInteger(0, obj_name, OBJPROP_FONTSIZE, 12);
        ObjectSetInteger(0, obj_name, OBJPROP_SELECTABLE, true);
        ObjectSetInteger(0, obj_name, OBJPROP_HIDDEN, false);
}

Вместо шрифта в свойствах пустота, рисует ариалом. У меня linux (wine), если это имеет значение.


Пожалуйста, почините работу TextSetFont()! Нужна работа стандартных объектов с подключённым шрифтом из ресурса.

 
Ilya Filatov #:

У меня в MT5 не работает. Вообще, вместо имени шрифта любую белиберду можно передать, TextSetFont() молчит и всегда возвращает истину.

Вместо шрифта в свойствах пустота, рисует ариалом. У меня linux (wine), если это имеет значение.


Пожалуйста, почините работу TextSetFont()! Нужна работа стандартных объектов с подключённым шрифтом из ресурса.

TextSetFont работает только с TextOut "by design". Вы просите не о починке, а о новой фиче. Может когда-нибудь и сделают.

А возврат true при передаче "левого" шрифта - скорее всего, ошибка. Обычно просят предоставить скрипт для воспроизведения проблемы.

 
Stanislav Korotky #:

TextSetFont работает только с TextOut "by design". Вы просите не о починке, а о новой фиче. Может когда-нибудь и сделают.

А возврат true при передаче "левого" шрифта - скорее всего, ошибка. Обычно просят предоставить скрипт для воспроизведения проблемы.

Нет, вопрос шире. Мне вообще нужно было шрифт из ресурса в кнопки/надписи без канваса засунуть. Оказалось, что множество функций, которые в документации явно не запрещают это делать (или даже должны), по факту это не поддерживают, но при этом молчат как партизаны и ошибок не возвращают. Код воспроизведения уже приводил, но вот ещё более наглядно поправил:

void OnStart()
{
        ResetLastError();

        // test function on wrong font
        string font = "blablabla";
        bool result = TextSetFont(font, 12 * -10, FW_DONTCARE);

        // no errors!
        if(result) Print("Font ", font, " accepted, why not?");
        else Print("Error #", _LastError); // 0!

        // label-object creation test
        string obj_name = "TestObject";
        if(!ObjectCreate(0, obj_name, OBJ_LABEL, 0, 0, 0))
        {
                Print(__FUNCTION__, ": label creation failed! Error = ", _LastError);
                return;
        }

        // push wrong font name
        bool no_error = ObjectSetString(0, obj_name, OBJPROP_FONT, font);
        if(no_error) Print("ObjectSetString() returns true! Very nice!");
}
 
Ilya Filatov #:

Нет, вопрос шире. Мне вообще нужно было шрифт из ресурса в кнопки/надписи без канваса засунуть. Оказалось, что множество функций, которые в документации явно не запрещают это делать (или даже должны), по факту это не поддерживают, но при этом молчат как партизаны и ошибок не возвращают. Код воспроизведения уже приводил, но вот ещё более наглядно поправил:

По шрифтам. Соответствующий файл со шрифтом должен лежать в системной папке шрифтов. Это если я правильно помню, как сию проблему решал, но как-то решал)))
 
Vladimir Simakov #:
По шрифтам. Соответствующий файл со шрифтом должен лежать в системной папке шрифтов. Это если я правильно помню, как сию проблему решал, но как-то решал)))

Ну конечно я всё проверил. Даже реестр на наличие записи о регистрации шрифта в порядке. Тут проблема, что на явную проблему функция молчит как так и надо (смотрите пример выше). К тому же, исходя из справки я ожидал, что объекты типа кнопки и надписи, тоже могут получать шрифт из ресура, но это не так. Обычный шрифт из системы, конечно, все функции принимают на "ура".

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