А такое можно создать через буферы, а не через объекты?

 
 
Напрашивается вопрос. Зачем?
 
В смысле какой практический смысл данного индикатора? Как его использовать?
 

С двумя буферами точно не получится, т. к. в буфер записывается число типа double. То есть максимум, что можно сделать на двух буферах, это вывести одну цифру возле каждой тени свечи. А вот если добавить буферов по количеству символов в надписи, то худо-бедно должно получиться. 

Но, опять же, для чего такая морока? Представленные индикатором данные и без него есть на графике. Если нужно читать через iCustom, то проще напрямую обращаться к ценам свечи. Напрашивается вывод, что это вообще не нужно.

 
Mihail Marchukajtes #:
Напрашивается вопрос. Зачем?
Спортивного интересу для…
 

можно через буферы  + нарисовать это все через TextOut или использовать класс CCanvas

тогда и объекты вам не потребуются, но заморочек действительно тут много :))) проще объектами.

 
Alexandr Gavrilin #:

можно через буферы  + нарисовать это все через TextOut или использовать класс CCanvas

////

А TextOut() без канваса, это как?

 
Dmitry Fedoseev #:

А TextOut() без канваса, это как?

Вот в справочнике:



В канвасе делегирование происходит:




 
Yevhenii Levchenko #:

Вот в справочнике:



В канвасе делегирование происходит:




И? Без канваса изобразите.

 
Dmitry Fedoseev #:

И? Без канваса изобразите.

Создайте скрипт из примера со справочника:
//--- ширина и высота канваса (холста, на котором происходит рисование) 
#define IMG_WIDTH  200 
#define IMG_HEIGHT 200 
//--- перед запуском скрипта покажем окно с параметрами 
#property script_show_inputs 
//--- дадим возможность задавать формат цвета 
input ENUM_COLOR_FORMAT clr_format=COLOR_FORMAT_XRGB_NOALPHA; 
//--- массив (буфер) для отрисовки  
uint ExtImg[IMG_WIDTH*IMG_HEIGHT]; 
//+------------------------------------------------------------------+ 
//| Script program start function                                    | 
//+------------------------------------------------------------------+ 
void OnStart() 
  { 
//--- создадим объект OBJ_BITMAP_LABEL для рисования     
   ObjectCreate(0,"CLOCK",OBJ_BITMAP_LABEL,0,0,0); 
//--- укажем имя графического ресурса для отрисовки в объекте CLOCK 
   ObjectSetString(0,"CLOCK",OBJPROP_BMPFILE,"::IMG");
 
//--- вспомогательные переменные 
   double a;            // угол стрелки 
   uint   nm=2700;      // счетчик минут 
   uint   nh=2700*12;   // счетчик часов 
   uint   w,h;          // переменные для получения размеров текстовых строк  
   int    x,y;          // переменные для расчета текущих координат точки привязки текстовых строк
 
//--- крутим стрелки часов в бесконечном цикле, пока скрипт не остановят 
   while(!IsStopped()) 
     { 
      //--- очистка массива буфера рисования часов 
      ArrayFill(ExtImg,0,IMG_WIDTH*IMG_HEIGHT,0); 
      //--- установка шрифта для отрисовки цифр на циферблате 
      TextSetFont("Arial",-200,FW_EXTRABOLD,0); 
      //--- рисуем циферблат 
      for(int i=1;i<=12;i++) 
        { 
         //--- получим размеры текущего часа на циферблате 
         TextGetSize(string(i),w,h); 
         //--- вычислим координаты текущего часа на циферблате 
         a=-((i*300)%3600*M_PI)/1800.0; 
         x=IMG_WIDTH/2-int(sin(a)*80+0.5+w/2); 
         y=IMG_HEIGHT/2-int(cos(a)*80+0.5+h/2); 
         //--- вывод этого часа на циферблат в буфер ExtImg[] 
         TextOut(string(i),x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format); 
        } 
      //--- теперь установим шрифт для отрисовки минутной стрелки       
      TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nm%3600)); 
      //--- получим размеры минутной стрелки 
      TextGetSize("----->",w,h); 
      //--- вычислим координаты минутной стрелки на циферблате 
      a=-(nm%3600*M_PI)/1800.0; 
      x=IMG_WIDTH/2-int(sin(a)*h/2+0.5); 
      y=IMG_HEIGHT/2-int(cos(a)*h/2+0.5); 
      //--- вывод минутной стрелки на циферблат в буфер ExtImg[] 
      TextOut("----->",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format); 
 
      //--- теперь установим шрифт для отрисовки часовой стрелки       
      TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nh/12%3600)); 
      TextGetSize("==>",w,h); 
      //--- вычислим координаты часовой стрелки на циферблате 
      a=-(nh/12%3600*M_PI)/1800.0; 
      x=IMG_WIDTH/2-int(sin(a)*h/2+0.5); 
      y=IMG_HEIGHT/2-int(cos(a)*h/2+0.5); 
      //--- вывод часовой стрелки на циферблат в буфер ExtImg[] 
      TextOut("==>",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format); 
 
      //--- обновление графического ресурса 
      ResourceCreate("::IMG",ExtImg,IMG_WIDTH,IMG_HEIGHT,0,0,IMG_WIDTH,clr_format); 
      //--- принудительное обновление графика 
      ChartRedraw();
 
      //--- увеличим счетчики часа и минут 
      nm+=60; 
      nh+=60; 
      //--- выдержим небольшую паузу между кадрами 
      Sleep(10); 
     } 
//--- удалим объект CLOCK при завершении работы скрипта 
   ObjectDelete(0,"CLOCK"); 
//--- 
  }
 
Yevhenii Levchenko #:
Создайте скрипт из примера со справочника:

это и есть канвас