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

 
denkir:

Ага, спасибо, сработало... сам пробовал через ObjectMove...

Создаю панель с помощью канваса... нужно её передвинуть по возможности на графике...
А если панель создавать на базе стандартного диалога? Тогда все элементы созданные в диалоге и добавленные в него, будут перетаскиваться вместе с диалогом.
 
barabashkakvn:
А если панель создавать на базе стандартного диалога? Тогда все элементы созданные в диалоге и добавленные в него, будут перетаскиваться вместе с диалогом.
Да, удобная фича, согласен... до этого момента так и делал... но тут встал вопрос, как добавить пользовательскую графику на панель... вообще по хорошему нужно сделать канвасоподобный control : public CWndObj. Сейчас думаю над этим вопросом...
 
denkir:
Да, удобная фича, согласен... до этого момента так и делал... но тут встал вопрос, как добавить пользовательскую графику на панель... вообще по хорошему нужно сделать канвасоподобный control : public CWndObj. Сейчас думаю над этим вопросом...

Посмотрите видео из поста.

После 15 марта будет в исходниках 

 
denkir:
Да, удобная фича, согласен... до этого момента так и делал... но тут встал вопрос, как добавить пользовательскую графику на панель... вообще по хорошему нужно сделать канвасоподобный control : public CWndObj. Сейчас думаю над этим вопросом...

Что значит "пользовательскую графику":

  • в смысле это то, что Вы нарисуете, как программист?
  • в смысле, берётся картинка от пользователя программы и эта картинка должна отобразиться на канвасе?
 
barabashkakvn:

Что значит "пользовательскую графику":

  • в смысле это то, что Вы нарисуете, как программист?
  • в смысле, берётся картинка от пользователя программы и эта картинка должна отобразиться на канвасе?
Да, выразился неопределённо... Имел в виду возможность создавать динамически различные фигуры средствами методов класса CCanvas...
 

Владимир, хотел вот ещё что спросить.

Есть панель типа CAppDialog. Пусть один из её элементов - это графическая метка типа CBmpButton. Так вот, нельзя ли как-то создать канвас и залинковать его с указанной меткой?  Цель - иметь управляемый элемент панели с возможностями пользовательской графики...

Спасибо.

 
denkir:

Владимир, хотел вот ещё что спросить.

Есть панель типа CAppDialog. Пусть один из её элементов - это графическая метка типа CBmpButton. Так вот, нельзя ли как-то создать канвас и залинковать его с указанной меткой?  Цель - иметь управляемый элемент панели с возможностями пользовательской графики...

Спасибо..

Можно создавать канвасы (то есть несколько канвасов) без привязки к объекту графика через метод Create, а потом эти ресурсы назначаете BmpButton. Можно попробовать даже анимацию делать. Кстати давно хочу про анимацию подумать.
 

Владимир, спасибо за наводку, всё получилось!

Да, канвасы штука очень мощная :-)

Ждём от Вас интересных статей!

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

Поставил COLOR_FORMAT_XRGB_NOALPHA, но смешивание имеет место :-((

Правда у меня такой вариант. К диалогу типа CDialog прикреплена картинка типа CPicture. Она залинкована с ресурсом типа CCanvas. Последний создан без привязки к окну.

 
Dennis Kirichenko:
Владимир, не силён в канвасе...
Вопрос такой.
Рисуются различные фигуры в канвасе, и идёт наложение их друг на друга. Как сделать так, чтобы цвета оставались первоначальными без смешивания?

Поставил COLOR_FORMAT_XRGB_NOALPHA, но смешивание имеет место :-((

...

Кнавас

Нарисованный в канвасе цвет (назовём его "верхний" или последний) замещает цвет нарисованный в канвасе ранее.

//+------------------------------------------------------------------+
//|                                                   canvas+xor.mq5 |
//|                              Copyright © 2015, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#property description "The script draws overlapping areas on canvas"
//--- show the window of input parameters when launching the script
#property script_show_inputs
#include <Canvas\Canvas.mqh>
//--- input
input uchar alfa=150;         // alpha channel managing color transparency
//--- variable width and height of the chart.
int            ChartWidth=-1;
int            ChartHeight=-1;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- width and height of the chart
   ChartWidth=ChartWidthInPixels();
   ChartHeight=ChartHeightInPixelsGet()-50;

//--- create canvas COLOR_FORMAT_XRGB_NOALPHA
   CCanvas canvas_XARGB_NORMALIZE;
   if(!canvas_XARGB_NORMALIZE.CreateBitmapLabel("canvas_XARGB_NORMALIZE",0,0,
      ChartWidth,ChartHeight,COLOR_FORMAT_ARGB_NORMALIZE))
     {
      Print("Error creating canvas: ",GetLastError());
      return;
     }
   canvas_XARGB_NORMALIZE.Erase(ColorToARGB(clrAqua,255));
//--- create a rectangle №1
   canvas_XARGB_NORMALIZE.FillRectangle(ChartWidth/20,ChartHeight/20,
                                        10*ChartWidth/20,10*ChartHeight/20,
                                        ColorToARGB(clrBlue,alfa));
   canvas_XARGB_NORMALIZE.Update();
//--- wait for 3 second
   Sleep(3000);
//--- create a rectangle №2
   canvas_XARGB_NORMALIZE.FillRectangle(7*ChartWidth/20,7*ChartHeight/20,
                                        16*ChartWidth/20,16*ChartHeight/20,
                                        ColorToARGB(clrGreen,alfa));
   canvas_XARGB_NORMALIZE.Update();
//--- wait for 3 second
   Sleep(3000);
  }
//+------------------------------------------------------------------+
//| Chart property width                                             |
//+------------------------------------------------------------------+
int ChartWidthInPixels(const long chart_ID=0)
  {
//--- prepare the variable to get the property value
   long result=-1;
//--- reset the error value
   ResetLastError();
//--- receive the property value
   if(!ChartGetInteger(chart_ID,CHART_WIDTH_IN_PIXELS,0,result))
     {
      //--- display the error message in Experts journal
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- return the value of the chart property
   return((int)result);
  }
//+------------------------------------------------------------------+
//| Chart property height                                            |
//+------------------------------------------------------------------+
int ChartHeightInPixelsGet(const long chart_ID=0,const int sub_window=0)
  {
//--- prepare the variable to get the property value
   long result=-1;
//--- reset the error value
   ResetLastError();
//--- receive the property value
   if(!ChartGetInteger(chart_ID,CHART_HEIGHT_IN_PIXELS,sub_window,result))
     {
      //--- display the error message in Experts journal
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- return the value of the chart property
   return((int)result);
  }
//+------------------------------------------------------------------+
Файлы:
Причина обращения: