CPicture m_picture; m_picture.Create(0,name+"_CHART_LINE",0,45,50,500,300); m_picture.BmpName(m_graph.ResourceName()); CDialog::Add(m_picture);
Создаёте картинку размером с график, у графика берёте имя ресурса. И уже саму картинку добавляете на панель.
Вот код, который отображает График:
//+------------------------------------------------------------------+ //| Создать объект График | //+------------------------------------------------------------------+ bool CControlsDialog::CreatePicture(void) { //--- coordinates int x1=отступ_слева+50; int y1=отступ_сверху+300; int x2=x1+500; int y2=y1+300; //--- double x[] = { -100, -40, -10, 20, 30, 40, 50, 60, 70, 80, 120 }; double y[] = { -5, 4, -10, 23, 17, 18, -9, 13, 17, 4, 9 }; m_graph.Create(m_chart_id,m_name+"_Graph",m_subwin,x1,y1,x2,y2); //--- plot curve CCurve *curve=m_graph.CurveAdd(x,y,CURVE_LINES); curve.LinesSmooth(true); curve.LinesStyle(STYLE_DOT); curve.LinesEndStyle(LINE_END_ROUND); curve.LinesWidth(10); m_graph.CurvePlotAll(); m_graph.Update(); //--- create if(!m_picture.Create(m_chart_id,m_name+"_CHART_LINE",m_subwin,x1,y1,x2,y2)) return(false); //--- установим имя bmp-файлов для отображения элемента управления CPicture //m_picture.BmpName("\\Images\\euro.bmp"); m_picture.BmpName(m_graph.ResourceName()); //m_picture.BmpName(m_graph.ChartObjectName()); //Print(m_graph.ResourceName()," ",m_graph.ChartObjectName()); if(!Add(m_picture)) return(false); //--- succeed return(true); }Вроде бы всё правильно. График отображается и по сути принадлежит Панели. Почему тогда при её перемещении он живёт своей жизнью и не перемещается вместе с другими объектами, расположенными на ней. Логика размещения объектов, по сути, не изменилась. Можете разъяснить?
Вроде бы всё правильно. График отображается и по сути принадлежит Панели. Почему тогда при её перемещении он живёт своей жизнью и не перемещается вместе с другими объектами, расположенными на ней. Логика размещения объектов, по сути, не изменилась. Можете разъяснить?
Не видя всего кода, могу лишь предполагать что график не добавляется на панель, добавьте вот тут вывод сообщения.
if(!Add(m_picture)) { Print("Error: Add picture"); return(false); }
И вот этот момент смущает
int x1=отступ_слева+50; int y1=отступ_сверху+300; int x2=x1+500; int y2=y1+300;
Тут вы отступ задаёте уже от границ самой панели, картинка с такими отступами точно влезает туда?
При работе с панелями нужно иметь в виду, что размер который вы задаёте это внешний размер окна, внутреннее же рабочее поле будет меньше, за счёт бордюров, хедера.
Вот что у меня получилось, после добавления картинки на панель, удаляем с чарта ранее созданную картинку графика. Всё работает.
//+------------------------------------------------------------------+ //| Создать объект График | //+------------------------------------------------------------------+ bool CDialogStatistic::CreatePicture(void) { //--- coordinates //--- int x,y,width,height; //--- width=650; height=550; x=350; y=80; if(!CAppDialog::Create(0,"BEST_PANEL",m_subwin,x,y,x+width,y+height)) return(false); //--- double arr_x[] = { -100, -40, -10, 20, 30, 40, 50, 60, 70, 80, 120 }; double arr_y[] = { -5, 4, -10, 23, 17, 18, -9, 13, 17, 4, 9 }; width=600; height=500; x=0; y=0; m_graph.Create(m_chart_id,m_name+"_Graph",m_subwin,x,y,x+width,y+height); //--- plot curve CCurve *curve=m_graph.CurveAdd(arr_x,arr_y,CURVE_LINES); curve.LinesSmooth(true); curve.LinesStyle(STYLE_DOT); curve.LinesEndStyle(LINE_END_ROUND); curve.LinesWidth(10); m_graph.CurvePlotAll(); m_graph.Update(); //--- create width=400; height=300; x=20; y=10; if(!m_picture.Create(m_chart_id,m_name+"_CHART_LINE",m_subwin,x,y,x+width,y+height)) return(false); m_picture.BmpName(m_graph.ResourceName()); if(!Add(m_picture)) { Print("ERROR Add Picture"); return(false); } ObjectDelete(m_chart_id,m_name+"_Graph"); ChartRedraw(); //--- succeed return(true); }
Не видя всего кода, могу лишь предполагать что график не добавляется на панель, добавьте вот тут вывод сообщения.
И вот этот момент смущает
Тут вы отступ задаёте уже от границ самой панели, картинка с такими отступами точно влезает туда?
При работе с панелями нужно иметь в виду, что размер который вы задаёте это внешний размер окна, внутреннее же рабочее поле будет меньше, за счёт бордюров, хедера.
Вот что у меня получилось, после добавления картинки на панель, удаляем с чарта ранее созданную картинку графика. Всё работает.
if(!Add(m_picture)) { Print("ERROR Add Picture"); return(false); } ObjectDelete(m_chart_id,m_name+"_Graph"); ChartRedraw();Вставил эту часть кода. "Выровнял", так сказать, в соответствии с вашими замечаниями Объект График относительно границ Панели. Всё заработало. Ну, вот как так. Очень интересно.
Огромное спасибо! Благодарю за помощь. Буду рад, если тоже смогу оказаться чем - нибудь полезен. Удачи! :)

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Может кто-нибудь подсказать как, например, вот этот график
поместить на стандартную панель (используется панель на основе класса CPanel).
Вроде бы и не сложно всё, но что-то запутался :)
P.S. Пожалуйста, ссылки на EasyAndFastGUI не предлагать.