Библиотеки: EasyAndFastGUI - библиотека для создания графических интерфейсов - страница 14

 

Здравствуйте.

//+------------------------------------------------------------------+
//| Создание холста для рисования элемента                           |
//+------------------------------------------------------------------+
bool CElement::CreateCanvas(const string name,const int x,const int y,
                            const int x_size,const int y_size,ENUM_COLOR_FORMAT clr_format=COLOR_FORMAT_ARGB_NORMALIZE)
  {
//--- Корректировка размеров
   int xsize =(x_size<1)? 50 : x_size;
   int ysize =(y_size<1)? 20 : y_size;
//--- Сбросить последнюю ошибку
   ::ResetLastError();
//--- Создание объекта
   if(!m_canvas.CreateBitmapLabel(m_chart_id,m_subwin,name,x,y,xsize,ysize,clr_format))
     {
      ::Print(__FUNCTION__," > Не удалось создать холст для рисования элемента ("+m_class_name+"): ",::GetLastError());
      return(false);
     }
//--- Сбросить последнюю ошибку
   ::ResetLastError();
//--- Получим указатель на базовый класс
   if(!m_canvas.Attach(m_chart_id,name,clr_format))
     {
      ::Print(__FUNCTION__," > Не удалось присоединить холст для рисования к графику: ",::GetLastError());
      return(false);
     }
//--- Свойства
   ::ObjectSetString(m_chart_id,m_canvas.ChartObjectName(),OBJPROP_TOOLTIP,"\n");
   ::ObjectSetInteger(m_chart_id,m_canvas.ChartObjectName(),OBJPROP_CORNER,m_corner);
   ::ObjectSetInteger(m_chart_id,m_canvas.ChartObjectName(),OBJPROP_SELECTABLE,false);
//--- У всех элементов, кроме формы, приоритет больше, чем у главного элемента
   Z_Order((dynamic_cast<CWindow*>(&this)!=NULL)? 0 : m_main.Z_Order()+1);
//--- Координаты
   m_canvas.X(x);
   m_canvas.Y(y);
//--- Размеры
   m_canvas.XSize(x_size);
   m_canvas.YSize(y_size);
//--- Отступы от крайней точки
   m_canvas.XGap(CalculateXGap(x));
   m_canvas.YGap(CalculateYGap(y));
   return(true);
  }

CreateBitmapLabel - создаем графический ресурс

Attach - читаем этот же ресурс и еще раз пишем в этот же ресурс

Или я что-то не так понимаю?

 

И снова здравствуйте :)

class CMouse
  {

...............

   //--- (1) Возвращает номер окна, в котором находится курсор, (2) время соответствующее координате X, 
   //    (3) уровень (цена) соответствующий координате Y
   int               SubWindowNumber(void) const { return(m_subwin);                        }
   datetime          Time(void)            const { return(m_time);                          }
   double            Level(void)           const { return(m_level);                         }

Time и Level вообще где-то используется? Не нашел нигде...

Для чего используется SubWindowNumber?

Я это к тому, что ChartXYToTimePrice достаточно затратная операция для выполнения при каждом движении мыши...

 
Oleksii Chepurnyi:

Всё ведь в комментариях написано. Добавить даже нечего.

 
Anatoli Kazharski:

Всё ведь в комментариях написано. Добавить даже нечего.

Если Вы про комментарии в коде, то там все понятно, но вопросы ж не про то :)

 
Oleksii Chepurnyi:

...

Я это к тому, что ChartXYToTimePrice достаточно затратная операция для выполнения при каждом движении мыши...

Для получения относительной координаты, если GUI не в главном окне.

 
Anatoli Kazharski:

Для получения относительной координаты, если GUI не в главном окне.

Так может и вычислять только когда GUI не в главном окне? :)


Больше интересует, зачем Attach? На сколько я понял, он повторяет действия CreateBitmapLabel

 
Oleksii Chepurnyi:
Так может и вычислять только когда GUI не в главном окне? :)

Поэкспериментируйте. Бывают ещё такие варианты, когда главное окно GUI в подокне графика, а диалоговые в главном. 

Больше интересует, зачем Attach? На сколько я понял, он повторяет действия CreateBitmapLabel

Есть же код метода CCanvas::Attach():

//+------------------------------------------------------------------+
//| Attach new object with bitmap resource                           |
//+------------------------------------------------------------------+
bool CCanvas::Attach(const long chart_id,const string objname,ENUM_COLOR_FORMAT clrfmt=COLOR_FORMAT_XRGB_NOALPHA)
  {
   if(OBJ_BITMAP_LABEL==ObjectGetInteger(chart_id,objname,OBJPROP_TYPE))
     {
      string rcname=ObjectGetString(chart_id,objname,OBJPROP_BMPFILE);
      rcname=StringSubstr(rcname,StringFind(rcname,"::"));
      if(ResourceReadImage(rcname,m_pixels,m_width,m_height))
        {
         m_chart_id=chart_id;
         m_objname=objname;
         m_rcname=rcname;
         m_format=clrfmt;
         m_objtype=OBJ_BITMAP_LABEL;
         //--- success
         return(true);
        }
     }
//--- failed
   return(false);
  }
 
Anatoli Kazharski:


Есть же код метода CCanvas::Attach():

Да, а выше CreateBitmapLabel. Я их смотрел. И на сколько я разобрался, CreateBitmapLabel создает пустой ресурс, а Attach читает ресурс (какой-либо) и пишет его в m_pixels. И как уже писал выше, создаем ресурс (CreateBitmapLabel) с именем name, потом читаем этот же ресурс (Attach)  и опять пишем прочитанное в тот же m_pixels

Или я что-то не так понимаю?

PS Экспериментально без Attach все работает :)

 
Oleksii Chepurnyi:

...

PS Экспериментально без Attach все работает :)

На самом деле? Значит снова произошли, какие-то изменения. Раньше точно, что-то не работало.

А после удаления GUI с графика объекты удаляются?

 
Anatoli Kazharski:

На самом деле? Значит снова произошли, какие-то изменения. Раньше точно, что-то не работало.

А после удаления GUI с графика объекты удаляются?

Вроде все чисто :)

Файлы:
35.png  11 kb
36.png  6 kb