Ошибки, баги, вопросы - страница 3371

 
Andrey Dik #:
вместо вывода множества объектов можно было бы выводить на чарт один объект если позволить в них текст с работающей "\n", сейчас "\n" в объектах не работает.

Да, иногда Comment очень удобно. Я использую.

А выравнивать строки через табуляции ( \t ) не подходит ?

 
Andrey Dik #:
вместо вывода множества объектов можно было бы выводить на чарт один объект если позволить в них текст с работающей "\n", сейчас "\n" в объектах не работает.

Один объект

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Прозрачный текст

Nikolai Semko, 2021.11.28 23:54

Если на заднем плане, то прозрачность не нужна.
Прозрачность нужна, если перед графиком.
В этом случае можете воспользоваться моей библой, с которой проще работать, чем с объектами. 
Вот пример простого скрипта:

#include <Canvas\iCanvas_CB.mqh> //https://www.mql5.com/ru/code/22164
#resource "\\Files\\Abram Font4You.ttf"
string myFont="::Files\\Abram Font4You.ttf";
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
// Значения по умолчанию:
// "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)). 
Лучше вынести весь вывод текста или графики в отдельную функцию и перерисовывать каждый раз при наступлении нужного события.

ЗЫ есть версия MT4. Код тот же самый будет.


 
Nikolai Semko #:

Один объект

вот писал ранее:

Andrey Dik #:
...

Да, можно и на канвасе выводить, но хотелось бы и в объекте "текстовая метка" иметь такую возможность.

примерно так и делаю на канвасе за неимением более простых и лаконичных способов

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 и большие тексты с переносом строки в объектах стремятся к нулю, если честно, но а вдруг...

 
Andrey Dik #:

вот писал ранее:

примерно так и делаю на канвасе за неимением более простых и лаконичных способов

код и жизнь программистов упроститься, если будет возможность формировать строку в объектах с помощью "\n", в большинстве житейских случаев возможности канваса избыточны, когда нужно просто работать с текстом на чарте.

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

Как мне кажется, лучше иметь избыточные возможности, чем недовозможности. Например прозрачность - это разве избыточная возможность?
Более того, канвас это не надстройка в окне терминала, а его базис. Все стандартные объекты, сам чарт со шкалами формируются именно во внутреннем канвасе. Если разработчики предоставили доступ к этому базису, то разумно использовать эти возможности.
В комментах работает \n, так как известна высота строки.
Абсолютно не сложно программисту создать свою функцию (класс) с собственным персером строки с "\n", преобразовывая ее в массив строк и рендерить этот массив как душе угодно. Хоть через объекты, хоть через холст.
 
Nikolai Semko #:
Как мне кажется, лучше иметь избыточные возможности, чем недовозможности. Например прозрачность - это разве избыточная возможность?
Более того, канвас это не надстройка в окне терминала, а его базис. Все стандартные объекты, сам чарт со шкалами формируются именно во внутреннем канвасе. Если разработчики предоставили доступ к этому базису, то разумно использовать эти возможности.
В комментах работает \n, так как известна высота строки.
Абсолютно не сложно программисту создать свою функцию (класс) с собственным персером строки с "\n", преобразовывая ее в массив строк и рендерить этот массив как душе угодно.

да. можно создавать свои функции, парсить, перебрасывать в массивы и ещё много чем можно заниматься.

а можно было бы просто строку в объекте отобразить и делу конец.

кто ж спорит что канвас это круто? круто. но было бы гораздо проще и быстрее иметь моноширинный текст в Comment и многостроковый стринг в объектах. кому не надо, тот ни конвасом ни объектами не пользуется, а кому надо, тот мог бы использовать что ему удобно если бы был выбор.

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

 
Andrey Dik #:

да. можно создавать свои функции, парсить, перебрасывать в массивы и ещё много чем можно заниматься.

а можно было бы просто строку в объекте отобразить и делу конец.

кто ж спорит что канвас это круто? круто. но было бы гораздо проще и быстрее иметь моноширинный текст в Comment и многостроковый стринг в объектах. кому не надо, тот ни конвасом ни объектами не пользуется, а кому надо, тот мог бы использовать что ему удобно если бы был выбор.

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

Да, много чего не хватает. Эволюция - вещь медленная.
Да, конечно, OBJ_LABEL логичнее было сделать много строчным, а не одно строчным.

 
pivomoe #:
Я ожидал, что терминал будет вести себя так же, как и браузер. Появился Lan переходим на него. А терминал сидит до упора на Wifi. 

Вероятно браузер меняет сеть при открытии новых страниц, так как создаёт под них новое соединение, а терминал работает с тем, что создал - нет повода для создания нового, иначе нужно было бы переподключиться к серверу.

 
Alexandr Gavrilin #:

Сегодня обновился МТ5 на 3869 билд.

Возникли проблемы с комментариями у стрелок индикаторов.

Вот код для демонстрации, наведите на любую стрелку, у меня попадает все что идет после " во всплывающий комментарий.

вот так это стало выглядеть


Когда это исправлено будет? Уже 3875 (бета) , а проблема наблюдается.


вот так выглядит у индикаторов и на графике тоже пишет все \это

 
Alexandr Gavrilin #:

Когда это исправлено будет? Уже 3875 (бета) , а проблема наблюдается.


вот так выглядит у индикаторов и на графике тоже пишет все \это

Исправление будет доступно в следующем билде
 
Подскажите по синтаксису, как обойти эту ошибку?
class A
{
public:
  A() { this.f(); } // Надо, чтобы вызывался виртуальный метод потомка.
  virtual void f() = NULL;
};

class B : public A
{
public:  
  virtual void f() { Print(__FUNCSIG__); }  
};

void OnStart()
{
  B b; // pure virtual function call
}
Причина обращения: