Обсуждение статьи "Изучаем класс CCanvas. Реализация прозрачности графических объектов" - страница 4

 
Dennis Kirichenko:

Владимир, вопрос к Вам как к спецу.

Есть панель в виде холста. А потом на графике рисуются трендовые линии. Как их спрятать за холст?


Например уничтожить панель и нарисовать заново...
 
Ага, спасибо. Пока придумал просто объекты помещать на задний план...
 
Vladimir Karputov:
Спасибо за статью. К сожалению, все ссылки на документацию в ней битые.
 
Alexey Kozitsyn:
Спасибо за статью. К сожалению, все ссылки на документацию в ней битые.

Спасибо за сообщение - справка перестроилась, поэтому ошибки. Ссылки поправим.

 
Vladimir Karputov:

By means of the class CCanvas? 

 

P.S. Use CCanvas.CreateBitmap:

Creates a graphical resource bound to a chart object.

1. Creates a graphical resource in the main window of the current chart.

bool  CreateBitmap( 
   const string       name,                                 // name 
   const datetime     time,                                 // time 
   const double       price,                                // price 
   const int          width,                                // width 
   const int          height,                               // height 
   ENUM_COLOR_FORMAT  clrfmt=COLOR_FORMAT_XRGB_NOALPHA      // format 
   );

 

Thus you will be able to bind one corner of a Сanvas. But width and height, all the same, will be set in pixels. 


а можно по русски писать здесь?

А то вы одним указания даете, а на самом деле двойные стандарты исповедуете.

 
Alexey Kozitsyn:
Спасибо за статью. К сожалению, все ссылки на документацию в ней битые.
Ссылки поправили. Спасибо за сообщение.
 
Alexey Petrov:
Ссылки поправили. Спасибо за сообщение.

Ошибки остались.

Пункт "Введение":

...

Прежде чем приступить к непосредственному рисованию с помощью класса CCanvas, нужно узнать некоторые определения, связанные с обработкой цвета. Например, что такое прозрачность и что такое альфа-канал.

...


Пункт "5.1. Создание скрипта "Illusion.mq5""

...

Рисуем закрашенный круг. Круг будет рисоваться поверх цвета, которым мы заполнили канвас (canvas_XRGB_NOALPHA.Erase(ColorToARGB(colr,alpha));).

canvas_XRGB_NOALPHA.CreateBitmapLabel - Здесь мы создали графический ресурс, привязанный к объекту чарта.

Заполняем весь канвас цветом в формате ARGB c прозрачностью alpha

Выводим текст - тип обработки изображения для данного канваса. Цвет текста в формате ARGB и альфа-каналом равным 255, то есть цвет выводимого текста 

Если мы хотим, чтобы все нарисованное отобразилось на экране, нужно обновить экран.

Так как мы создавали графический ресурс с привязкой к объекту чарта (метод CreateBitmapLabel), то удаление ресурса выполним с помощью метода Destroy() - заодно 

...

 

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

Вроде вынесена на передний план, все рисуется за ней, а вот сделки накладываются сверху.

void CreateEdit(long             chart_id,         // id графика
                int              sub_window,       // номер окна (подокна)
                string           name,             // имя объекта
                color            font_color,       // цвет шрифта
                int              x_size,           // ширина
                int              y_size,           // высота
                int              x_distance,       // координата по оси X
                int              y_distance,       // координата по оси Y
                long             z_order,          // приоритет
                color            background_color) // цвет фона        
  {
// Если объект создался успешно, то...
   if(ObjectCreate(chart_id,name,OBJ_RECTANGLE_LABEL,sub_window,0,0))
     {
      // ...установим его свойства
      ObjectSetInteger(chart_id,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);  // установка угла графика
      ObjectSetInteger(chart_id,name,OBJPROP_COLOR,font_color);         // цвет шрифта
      ObjectSetInteger(chart_id,name,OBJPROP_BGCOLOR,background_color); // цвет фона
      ObjectSetInteger(chart_id,name,OBJPROP_XSIZE,x_size);             // ширина
      ObjectSetInteger(chart_id,name,OBJPROP_YSIZE,y_size);             // высота
      ObjectSetInteger(chart_id,name,OBJPROP_XDISTANCE,x_distance);     // установка координаты X
      ObjectSetInteger(chart_id,name,OBJPROP_YDISTANCE,y_distance);     // установка координаты Y
      ObjectSetInteger(chart_id,name,OBJPROP_SELECTABLE,false);         // нельзя выделить объект, если FALSE
      ObjectSetInteger(chart_id,name,OBJPROP_ZORDER,z_order);           // приоритет объекта
      ObjectSetInteger(chart_id,name,OBJPROP_READONLY,true);            // только для чтения
      ObjectSetInteger(chart_id,name,OBJPROP_ALIGN,ALIGN_LEFT);         // выравнивание по левому краю
      //--- отобразим на переднем (false) или заднем (true) плане 
    ObjectSetInteger(chart_id,name,OBJPROP_BACK,false); 
      ObjectSetString(chart_id,name,OBJPROP_TOOLTIP,"\n");              // нет всплывающей подсказки, если "\n"
     }
  }
 
Konstantin Seredkin:

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

Вроде вынесена на передний план, все рисуется за ней, а вот сделки накладываются сверху.


Сейчас не проверю, но возможен такой вариант: панель - настоящая панель - строится на базе CDialog. Позже проверю (через день, два) ...

 
Konstantin Seredkin:

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

Вроде вынесена на передний план, все рисуется за ней, а вот сделки накладываются сверху.


Итак проверил: однозначно, делать нужно настоящую панель на базе класса CDialog. 

А теперь как поставить панель сверху значков "Buy", "Sell": у каждой панели есть значок "Свернуть панель":

Свернуть панель

после того, как Вы свернули панель, а потом снова её развернёте - все объекты в Вашей панели станут сверху всех предыдущих значков. То есть панель после того, как Вы её разворачиваете перерисовывает свои объекты и они будут последними созданными.

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