Тоже заморочился делать графическую библиотеку, только с необходимыми мне элементами.
Главная фишка библиотеки в его оконном движке:
не зависит от графической части, можно сказать, виртуальные окна без единой функции для работы с графикой, даже абсолютно окна будут корректно работать(события,свойства)
задаются множества свойств для окна, которые влияют на его поведение, зависимые свойства этого окна и других
в качестве графики можно использовать как стандартные объекты, так и канвас, и DirectX, тут как душе угодно
окна движка являются кирпичиками для построения графических элементов
использование разных оптимизаций для быстродействия(исключение лишних вызовов графических системных функций, также и исключение из прорисовки невидимых окошек)
простота в создании нового графического элемента, как реализации графического оформления, так и создание структуры дочерних элементов/окон. Все события и просчёт зависимых свойств будут происходит на уровне движка, он не различает пользовательские графические элементы, работает только на уровне базовых окон
Создание и удаление стандартного объекта OBJ_RECTANGLE_LABEL , проще некуда
Текстовая метка реализована через канвас по причине того, что объекту OBJ_LABEL нельзя изменить ширину и высоту, и по этой причине прорисовка происходит при поступлении событии CHARTEVENT_ON_PAINT (необходимость перерисовки)
bool cV_object_label::_On_event(const sEvent &event)
{
if(event.id==CHARTEVENT_ON_PAINT)
{
color color_back=clrBlack;
if(CheckPointer(_object_parent))
{
color_back=color(_object_parent._property_values[vop_color_back].data_long);
}
int width=int(_property_values[vop_s_size_real_x].data_long);
int height=int(_property_values[vop_s_size_real_y].data_long);
int x=int(_property_values[vop_s_position_global_x].data_long-_property_values[vop_s_position_real_x].data_long);
int y=int(_property_values[vop_s_position_global_y].data_long-_property_values[vop_s_position_real_y].data_long);
_canvas.Resize(width,height);
width=int(_property_values[vop_size_x].data_long);
height=int(_property_values[vop_size_y].data_long);
_canvas.Erase(ColorToARGB(color_back));
switch(int(_property_values[vop_text_anchor].data_long))
{
caseTA_CENTER:
{
x=x+(width-_canvas.TextWidth(_property_values[vop_text].data_string))/2;
break;
}
caseTA_RIGHT:
{
x=x+(width-_canvas.TextWidth(_property_values[vop_text].data_string));
break;
}
}
_canvas.TextOut(x,y,_property_values[vop_text].data_string,ColorToARGB(color(_property_values[vop_s_color_back].data_long)));//);
_canvas.Update(false);
}
returntrue;
}
Что просчитывать и обновлять определяется автоматически. Логируется время просчёта свойств и до вызова ChartRedraw() . События, что не привели к перерисовке графика пропускаются
Проверил работоспособность и потенциал функционала 3D графики в МТ5 на слабом компе с 4 гигами оперативки и 2-умя ядрами процессора.
Осваивается нормально, даже после затяжной паузы в программировании. Но, вещь тяжелая и чтобы создать что то серьезное - нужно немало потрудиться.
Для HFT, 3D думаю будет полезно при создании графического анализа объемов стакана и потока ордеров. Но как интерпретировать такую информацию, не вникал.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Как продвигается библиотека?
все более чем хорошо.
Тоже заморочился делать графическую библиотеку, только с необходимыми мне элементами.
Главная фишка библиотеки в его оконном движке:
Создание и удаление стандартного объекта OBJ_RECTANGLE_LABEL , проще некуда
Тут реализуем метод для изменения свойств стандартного объекта OBJ_RECTANGLE_LABEL, шуршание по справке и использование интересующих свойств
- лёгкость в обработке событий
Это внешний обработчик событий, имя интересующего объекта(окна/графического элемента) можно указать при его созданииТекстовая метка реализована через канвас по причине того, что объекту OBJ_LABEL нельзя изменить ширину и высоту, и по этой причине прорисовка происходит при поступлении событии CHARTEVENT_ON_PAINT (необходимость перерисовки)
Что просчитывать и обновлять определяется автоматически. Логируется время просчёта свойств и до вызова ChartRedraw() . События, что не привели к перерисовке графика пропускаются
Демка в прикрепленном файле, выше исходники используются в ней.
Демка не отображает все возможные свойства, только некоторые из них:
Ещё всё процессе разработки, пока так.
Демка не отображает все возможные свойства, только некоторые из них:
Ещё всё процессе разработки, пока так.
Удачи в разработке! :)
Удачи в разработке! :)
Спасибо :)
Проверил работоспособность и потенциал функционала 3D графики в МТ5 на слабом компе с 4 гигами оперативки и 2-умя ядрами процессора.
Осваивается нормально, даже после затяжной паузы в программировании. Но, вещь тяжелая и чтобы создать что то серьезное - нужно немало потрудиться.
Проверил работоспособность и потенциал функционала 3D графики в МТ5 на слабом компе с 4 гигами оперативки и 2-умя ядрами процессора.
Осваивается нормально, даже после затяжной паузы в программировании. Но, вещь тяжелая и чтобы создать что то серьезное - нужно немало потрудиться.
Для HFT, 3D думаю будет полезно при создании графического анализа объемов стакана и потока ордеров.
Но как интерпретировать такую информацию, не вникал.
бог ты мой ! зачем все это ?