а что дебаг говорит?
может он на
//--- error - destroy object
Destroy();
вываливает из resize?
может он на
//--- error - destroy object
Destroy();
вываливает из resize?
o_O:
а что дебаг говорит?
а что дебаг говорит?
Говорит о том, что если канвас создан при помощи Create - то внутренний объект (в классе CCanvas) m_objname==NULL. Но, если создаём канвас при помощи CreateBitmapLabel или при помощи CreateBitmap, то объект m_objname будет заполнен и метод Resize отработает без ошибки.
//+------------------------------------------------------------------+
//| Resize |
//+------------------------------------------------------------------+
bool CCanvas::Resize(const int width,const int height)
{
//--- check
if(m_rcname!=NULL && width>0 && height>0)
if(ArrayResize(m_pixels,width*height)>0)
{
m_width =width;
m_height=height;
//--- initialize data with zeros
ArrayInitialize(m_pixels,0);
//--- create dynamic resource
if(ResourceCreate(m_rcname,m_pixels,m_width,m_height,0,0,0,m_format))
{
//--- bind object with resource
if(m_objname!=NULL && ObjectSetString(m_chart_id,m_objname,OBJPROP_BMPFILE,m_rcname))
return(true);
}
}
//--- error - destroy object
Destroy();
return(false);
}
//| Resize |
//+------------------------------------------------------------------+
bool CCanvas::Resize(const int width,const int height)
{
//--- check
if(m_rcname!=NULL && width>0 && height>0)
if(ArrayResize(m_pixels,width*height)>0)
{
m_width =width;
m_height=height;
//--- initialize data with zeros
ArrayInitialize(m_pixels,0);
//--- create dynamic resource
if(ResourceCreate(m_rcname,m_pixels,m_width,m_height,0,0,0,m_format))
{
//--- bind object with resource
if(m_objname!=NULL && ObjectSetString(m_chart_id,m_objname,OBJPROP_BMPFILE,m_rcname))
return(true);
}
}
//--- error - destroy object
Destroy();
return(false);
}
В итоге получается:
- или можем создать канвас при помощи Create - но тогда m_objname==NULL и метод Resize вернёт false
- или создаём канвас при помощи CreateBitmapLabel или CreateBitmap - но тогда не понятно как этот канвас добавить в панель диалогов...
Vladimir Karputov:
именно.В итоге получается:
- или можем создать канвас при помощи Create - но тогда m_objname==NULL и метод Resize вернёт false
- или создаём канвас при помощи CreateBitmapLabel или CreateBitmap - но тогда не понятно как этот канвас добавить в панель диалогов...
в ветке тестирования CGraphic я уже упоминал этот недостаток проектироваки канваса.
Поэтому придётся канвас отнаследовать и самому сделать правильную create.
o_O:
именно.
в ветке тестирования CGraphic я уже упоминал этот недостаток проектироваки канваса.
Поэтому придётся канвас отнаследовать и самому сделать правильную create.
Тогда уж и Create и Resize переделать.
именно.
в ветке тестирования CGraphic я уже упоминал этот недостаток проектироваки канваса.
Поэтому придётся канвас отнаследовать и самому сделать правильную create.
Vladimir Karputov:
Тогда уж и Create и Resize переделать.
или еще вариант - не трогать Resize.Тогда уж и Create и Resize переделать.
просто помнить про это поведение и всегда делать Create для нового размера
Build 1550. В класс CCanvas внесены изменения.
//+------------------------------------------------------------------+
//| Resize |
//+------------------------------------------------------------------+
bool CCanvas::Resize(const int width,const int height)
{
//--- check
if(m_rcname!=NULL && width>0 && height>0)
if(ArrayResize(m_pixels,width*height)>0)
{
m_width =width;
m_height=height;
//--- initialize data with zeros
ArrayInitialize(m_pixels,0);
//--- create dynamic resource
if(ResourceCreate(m_rcname,m_pixels,m_width,m_height,0,0,0,m_format))
{
//--- bind object with resource
if(m_objname!=NULL && ObjectSetString(m_chart_id,m_objname,OBJPROP_BMPFILE,m_rcname))
return(true);
}
}
//--- error
return(false);
}
//| Resize |
//+------------------------------------------------------------------+
bool CCanvas::Resize(const int width,const int height)
{
//--- check
if(m_rcname!=NULL && width>0 && height>0)
if(ArrayResize(m_pixels,width*height)>0)
{
m_width =width;
m_height=height;
//--- initialize data with zeros
ArrayInitialize(m_pixels,0);
//--- create dynamic resource
if(ResourceCreate(m_rcname,m_pixels,m_width,m_height,0,0,0,m_format))
{
//--- bind object with resource
if(m_objname!=NULL && ObjectSetString(m_chart_id,m_objname,OBJPROP_BMPFILE,m_rcname))
return(true);
}
}
//--- error
return(false);
}
а было так:
//+------------------------------------------------------------------+
//| Resize |
//+------------------------------------------------------------------+
bool CCanvas::Resize(const int width,const int height)
{
//--- check
if(m_rcname!=NULL && width>0 && height>0)
if(ArrayResize(m_pixels,width*height)>0)
{
m_width =width;
m_height=height;
//--- initialize data with zeros
ArrayInitialize(m_pixels,0);
//--- create dynamic resource
if(ResourceCreate(m_rcname,m_pixels,m_width,m_height,0,0,0,m_format))
{
//--- bind object with resource
if(m_objname!=NULL && ObjectSetString(m_chart_id,m_objname,OBJPROP_BMPFILE,m_rcname))
return(true);
}
}
//--- error - destroy object
Destroy();
return(false);
}
//| Resize |
//+------------------------------------------------------------------+
bool CCanvas::Resize(const int width,const int height)
{
//--- check
if(m_rcname!=NULL && width>0 && height>0)
if(ArrayResize(m_pixels,width*height)>0)
{
m_width =width;
m_height=height;
//--- initialize data with zeros
ArrayInitialize(m_pixels,0);
//--- create dynamic resource
if(ResourceCreate(m_rcname,m_pixels,m_width,m_height,0,0,0,m_format))
{
//--- bind object with resource
if(m_objname!=NULL && ObjectSetString(m_chart_id,m_objname,OBJPROP_BMPFILE,m_rcname))
return(true);
}
}
//--- error - destroy object
Destroy();
return(false);
}
Теперь пример из первого поста работает - позволяет менять размер канваса на панели диалога:
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот такая проблема: канвас создаётся, добавляется к панели диалога. Но вот впоследствии менять размер канваса не выходит.
Канвас создаю так: