Я не советую на MQL5 использовать Comment. Это самая медленно работающая команда, потом идет Print, строковые операции и т.д.
А на MQL4 Comment почему-то работает довольно быстро.
А кто хочет строить таблицу, то это можно делать через OBJ_EDIT, если другие способы не знаете.
вместо вывода множества объектов можно было бы выводить на чарт один объект если позволить в них текст с работающей "\n", сейчас "\n" в объектах не работает.
Andrey Dik #: вместо вывода множества объектов можно было бы выводить на чарт один объект если позволить в них текст с работающей "\n", сейчас "\n" в объектах не работает.
Ага. Заодно сделать, чтоб в OBJ_EDIT, хотя скорее всего имелось ввиду OBJ_LABEL, можно было выводить больше 63 символов иначе от переноса строк смысла не будет.
Andrey Dik #: вместо вывода множества объектов можно было бы выводить на чарт один объект если позволить в них текст с работающей "\n", сейчас "\n" в объектах не работает.
Да, иногда Comment очень удобно. Я использую.
А выравнивать строки через табуляции ( \t ) не подходит ?
Andrey Dik #: вместо вывода множества объектов можно было бы выводить на чарт один объект если позволить в них текст с работающей "\n", сейчас "\n" в объектах не работает.
Если на заднем плане, то прозрачность не нужна. Прозрачность нужна, если перед графиком. В этом случае можете воспользоваться моей библой, с которой проще работать, чем с объектами. Вот пример простого скрипта:
#include <Canvas\iCanvas_CB.mqh> //https://www.mql5.com/ru/code/22164#resource "\\Files\\Abram Font4You.ttf"string myFont="::Files\\Abram Font4You.ttf";
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnStart()
{
// Значения по умолчанию:// "Courier New" - начальный шрифт с размером 18 // Canvas.TextPosX=20; - начальная координата X// Canvas.TextPosY=100; - начальная координата Y// Canvas.TextColor=clrDarkOrchid; - цвет текста с прозрачностью 1.0 (полностью непрозрачный)// Canvas.StepTextLine = 20; - шаг между строкамиulong t = GetMicrosecondCount();
Canvas.Erase(0x00FFFFFF); // 0x00FFFFFF это важно. Не 0. Иначе шрифты будут не четкими на небелом фоне
Canvas.Comm("В синем небе звезды блещут,");
Canvas.Comm("В синем море волны хлещут;");
Canvas.Comm("Туча по небу идет,");
Canvas.Comm("Бочка по морю плывет.");
Canvas.TextPosition(100,500); // Позиция X и Y. Если целое число то значение в пикселях. Если double, то в процентах от ширины и высоты
Canvas.CurentFont("Arial",25,30,clrRed,0.3); // 25 - размер, 30 - расстояние между строками, 0.3 - прозрачность
Canvas.Comm("Словно горькая вдовица,");
Canvas.Comm("Плачет, бьется в ней царица;");
Canvas.Comm("И растет ребенок там");
Canvas.Comm("Не по дням, а по часам.");
Canvas.TextPosition(50.0,20.0); // Позиция X и Y в процентах от ширины и высоты (тип dounle)
Canvas.CurentFont(myFont,50,30,0xFFFF00FF,0.9); // 50 - размер, 30 - расстояние между строками, прозрачность - 0.9
Canvas.Comm("День прошел, царица вопит...");
Canvas.Comm("А дитя волну торопит:");
Canvas.Comm("«Ты, волна моя, волна!");
Canvas.Comm("Ты гульлива и вольна;");
Canvas.TextPosY+=20; // увеличиваем Y координату на 20 пикселей
Canvas.Comm("Плещешь ты, куда захочешь,");
Canvas.TextPosX+=20; // увеличиваем X координату на 20 пикселей
Canvas.Comm("Ты морские камни точишь,");
Canvas.TextPosX+=20; // увеличиваем X координату на 20 пикселей
Canvas.Comm("Топишь берег ты земли,");
Canvas.TextPosX+=20; // увеличиваем X координату на 20 пикселей
Canvas.Comm("Подымаешь корабли —");
Canvas.StepTextLine+=30; // увеличиваем шаг между строками на 30 пикселей
Canvas.Comm("Не губи ты нашу душу:");
Canvas.Comm("Выплесни ты нас на сушу!»");
Canvas.Update();
t=GetMicrosecondCount()-t;
Print("Время формирования и вывода текста - " +DoubleToString(t/1000.0, 2) + " миллисекунд");
Sleep(20000);
}
//+------------------------------------------------------------------+
Текст можно привязывать к барам ( функции Canvas.X(double bar) ), цене (Canvas.Y(double Price)) и времени ( Canvas.X(datetime Time)), к координатам окна в пикселях(TextPosition(int x,int y)) или процентах(TextPosition(double x,double y)). Лучше вынести весь вывод текста или графики в отдельную функцию и перерисовывать каждый раз при наступлении нужного события.
Да, можно и на канвасе выводить, но хотелось бы и в объекте "текстовая метка" иметь такую возможность.
примерно так и делаю на канвасе за неимением более простых и лаконичных способов
int x = 5;
int y = 2;
int s = 16;
Canvas.Erase (XRGB (0, 0, 0));
str = "========================="; Canvas.TextOut (x, y, str, COLOR2RGB (clrWhite), 0); y += s;
str = "TOP_TP : " + S.DS (TOP_TP); Canvas.TextOut (x, y, str, COLOR2RGB (clrWhite), 0); y += s;
str = "TOP_H_END : " + S.DS (TOP_H_END); Canvas.TextOut (x, y, str, COLOR2RGB (clrWhite), 0); y += s;
str = "TOP_T_END : " + S.DS (TOP_T_END); Canvas.TextOut (x, y, str, COLOR2RGB (clrWhite), 0); y += s;
str = "TOP_E_END : " + S.DS (TOP_E_END); Canvas.TextOut (x, y, str, COLOR2RGB (clrWhite), 0); y += s;
код и жизнь программистов упроститься, если будет возможность формировать строку в объектах с помощью "\n", в большинстве житейских случаев возможности канваса избыточны, когда нужно просто работать с текстом на чарте.
надежды на то, что разработчики дадут моноширинный текст в Comment и большие тексты с переносом строки в объектах стремятся к нулю, если честно, но а вдруг...
примерно так и делаю на канвасе за неимением более простых и лаконичных способов
код и жизнь программистов упроститься, если будет возможность формировать строку в объектах с помощью "\n", в большинстве житейских случаев возможности канваса избыточны, когда нужно просто работать с текстом на чарте.
надежды на то, что разработчики дадут моноширинный текст в Comment и большие тексты с переносом строки в объектах стремятся к нулю, если честно, но а вдруг...
Как мне кажется, лучше иметь избыточные возможности, чем недовозможности. Например прозрачность - это разве избыточная возможность?
Более того, канвас это не надстройка в окне терминала, а его базис. Все стандартные объекты, сам чарт со шкалами формируются именно во внутреннем канвасе. Если разработчики предоставили доступ к этому базису, то разумно использовать эти возможности.
В комментах работает \n, так как известна высота строки.
Абсолютно не сложно программисту создать свою функцию (класс) с собственным персером строки с "\n", преобразовывая ее в массив строк и рендерить этот массив как душе угодно. Хоть через объекты, хоть через холст.
Nikolai Semko #: Как мне кажется, лучше иметь избыточные возможности, чем недовозможности. Например прозрачность - это разве избыточная возможность?
Более того, канвас это не надстройка в окне терминала, а его базис. Все стандартные объекты, сам чарт со шкалами формируются именно во внутреннем канвасе. Если разработчики предоставили доступ к этому базису, то разумно использовать эти возможности.
В комментах работает \n, так как известна высота строки.
Абсолютно не сложно программисту создать свою функцию (класс) с собственным персером строки с "\n", преобразовывая ее в массив строк и рендерить этот массив как душе угодно.
да. можно создавать свои функции, парсить, перебрасывать в массивы и ещё много чем можно заниматься.
а можно было бы просто строку в объекте отобразить и делу конец.
кто ж спорит что канвас это круто? круто. но было бы гораздо проще и быстрее иметь моноширинный текст в Comment и многостроковый стринг в объектах. кому не надо, тот ни конвасом ни объектами не пользуется, а кому надо, тот мог бы использовать что ему удобно если бы был выбор.
повторюсь, я не против канваса (во многих случаях он незаменим), но я за расширение возможностей объектов и моноширинный текст в Comment.
да. можно создавать свои функции, парсить, перебрасывать в массивы и ещё много чем можно заниматься.
а можно было бы просто строку в объекте отобразить и делу конец.
кто ж спорит что канвас это круто? круто. но было бы гораздо проще и быстрее иметь моноширинный текст в Comment и многостроковый стринг в объектах. кому не надо, тот ни конвасом ни объектами не пользуется, а кому надо, тот мог бы использовать что ему удобно если бы был выбор.
повторюсь, я не против канваса (во многих случаях он незаменим), но я за расширение возможностей объектов и моноширинный текст в Comment.
Да, много чего не хватает. Эволюция - вещь медленная.
Да, конечно, OBJ_LABEL логичнее было сделать много строчным, а не одно строчным.
pivomoe #: Я ожидал, что терминал будет вести себя так же, как и браузер. Появился Lan переходим на него. А терминал сидит до упора на Wifi.
Вероятно браузер меняет сеть при открытии новых страниц, так как создаёт под них новое соединение, а терминал работает с тем, что создал - нет повода для создания нового, иначе нужно было бы переподключиться к серверу.
Не работает где?
в Comment () форматирование с помощью StringFormat () не поможет, потому что используется не моноширинный текст.
вот код:
результат:
Видите? от форматирования нет никакого толка, буквы не выровнены, потому что имеют разную ширину, мне даже неудобно объяснять такие простые вещи.
Я не советую на MQL5 использовать Comment. Это самая медленно работающая команда, потом идет Print, строковые операции и т.д.
А на MQL4 Comment почему-то работает довольно быстро.
А кто хочет строить таблицу, то это можно делать через OBJ_EDIT, если другие способы не знаете.
вместо вывода множества объектов можно было бы выводить на чарт один объект если позволить в них текст с работающей "\n", сейчас "\n" в объектах не работает.
Ага. Заодно сделать, чтоб в OBJ_EDIT, хотя скорее всего имелось ввиду OBJ_LABEL, можно было выводить больше 63 символов иначе от переноса строк смысла не будет.
вместо вывода множества объектов можно было бы выводить на чарт один объект если позволить в них текст с работающей "\n", сейчас "\n" в объектах не работает.
Да, иногда Comment очень удобно. Я использую.
А выравнивать строки через табуляции ( \t ) не подходит ?
вместо вывода множества объектов можно было бы выводить на чарт один объект если позволить в них текст с работающей "\n", сейчас "\n" в объектах не работает.
Один объект
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Прозрачный текст
Nikolai Semko, 2021.11.28 23:54
Если на заднем плане, то прозрачность не нужна.
Прозрачность нужна, если перед графиком.
В этом случае можете воспользоваться моей библой, с которой проще работать, чем с объектами.
Вот пример простого скрипта:
Текст можно привязывать к барам ( функции Canvas.X(double bar) ), цене (Canvas.Y(double Price)) и времени ( Canvas.X(datetime Time)), к координатам окна в пикселях(TextPosition(int x,int y)) или процентах(TextPosition(double x,double y)).
Лучше вынести весь вывод текста или графики в отдельную функцию и перерисовывать каждый раз при наступлении нужного события.
ЗЫ есть версия MT4. Код тот же самый будет.
Один объект
вот писал ранее:
Andrey Dik #:
...
Да, можно и на канвасе выводить, но хотелось бы и в объекте "текстовая метка" иметь такую возможность.
примерно так и делаю на канвасе за неимением более простых и лаконичных способов
код и жизнь программистов упроститься, если будет возможность формировать строку в объектах с помощью "\n", в большинстве житейских случаев возможности канваса избыточны, когда нужно просто работать с текстом на чарте.
надежды на то, что разработчики дадут моноширинный текст в Comment и большие тексты с переносом строки в объектах стремятся к нулю, если честно, но а вдруг...
вот писал ранее:
примерно так и делаю на канвасе за неимением более простых и лаконичных способов
код и жизнь программистов упроститься, если будет возможность формировать строку в объектах с помощью "\n", в большинстве житейских случаев возможности канваса избыточны, когда нужно просто работать с текстом на чарте.
надежды на то, что разработчики дадут моноширинный текст в Comment и большие тексты с переносом строки в объектах стремятся к нулю, если честно, но а вдруг...
Как мне кажется, лучше иметь избыточные возможности, чем недовозможности. Например прозрачность - это разве избыточная возможность?
да. можно создавать свои функции, парсить, перебрасывать в массивы и ещё много чем можно заниматься.
а можно было бы просто строку в объекте отобразить и делу конец.
кто ж спорит что канвас это круто? круто. но было бы гораздо проще и быстрее иметь моноширинный текст в Comment и многостроковый стринг в объектах. кому не надо, тот ни конвасом ни объектами не пользуется, а кому надо, тот мог бы использовать что ему удобно если бы был выбор.
повторюсь, я не против канваса (во многих случаях он незаменим), но я за расширение возможностей объектов и моноширинный текст в Comment.
да. можно создавать свои функции, парсить, перебрасывать в массивы и ещё много чем можно заниматься.
а можно было бы просто строку в объекте отобразить и делу конец.
кто ж спорит что канвас это круто? круто. но было бы гораздо проще и быстрее иметь моноширинный текст в Comment и многостроковый стринг в объектах. кому не надо, тот ни конвасом ни объектами не пользуется, а кому надо, тот мог бы использовать что ему удобно если бы был выбор.
повторюсь, я не против канваса (во многих случаях он незаменим), но я за расширение возможностей объектов и моноширинный текст в Comment.
Я ожидал, что терминал будет вести себя так же, как и браузер. Появился Lan переходим на него. А терминал сидит до упора на Wifi.
Вероятно браузер меняет сеть при открытии новых страниц, так как создаёт под них новое соединение, а терминал работает с тем, что создал - нет повода для создания нового, иначе нужно было бы переподключиться к серверу.