Я попробовал этот исходник, он работает. Действительно отличная работа, спасибо!
Я попытался адаптировать его под свои нужды, но ничего не вышло. После нескольких часов отладки я нашел решение:
Когда имя файла ExampleEA.mq5 длиннее 14 символов, то при создании комбобокса функция ResourceCreate() внутри класса Canvas завершается с ошибкой 4016 (ресурс не найден).
Известно ли такое поведение? Поскольку я не знаю точных обстоятельств, приводящих к этой ошибке, я пытаюсь выяснить, как предотвратить подобные ошибки.
Обновление: я нашел соответствующее обсуждение с быстрым решением здесь.
2021.01.1817:57:52.598 MacdSampleCFrames (Si-3.21,M2) CElement::CreateCanvas > Не удалось создать холст для рисования элемента (CButton): 40162021.01.1817:57:52.598 MacdSampleCFrames (Si-3.21,M2) CProgram::OnTesterInitEvent > Could not create the GUI!
После одного из обновлений сократили буфер для строки глобальной переменной терминала и уже некоторое время выдаёт критическую ошибку.
Можно вылечить лайф-хаком не зарываясь в код, просто переименовав запускной файл советника, сократив его имя
например с такого: MacdSampleCFrames.ex5 до просто Macd.ex5
Почему бы классу CElement не написать методы для изменения свойств объекта (таких как шрифт, размер, цвет, цвет фона и т. д.) вместо того, чтобы использовать свойства по умолчанию. Это очень недружелюбно по отношению к программированию
И эти 6 сводятся к 4 следующим типам проблем. Не могли бы вы посоветовать, как правильно их исправить?
1. Как правильно заменить на "CElementBase::"?
//--- Определим цвет для линииcolor clr=m_back_color;
if(m_tabs.GetButtonPointer(m_selected_tab).IsLocked()) // этот!
clr=m_tabs.GetButtonPointer(m_selected_tab).BackColorLocked();
//--- Рисуем линию
m_canvas.Line(x1,y1,x2,y2,::ColorToARGB(clr,m_alpha));
}
2. И вот здесь - когда я заменяю "el." на "CElementBase::" - возникает новая ошибка компиляции "IsAvailable - access to non-staticmember of function" - как ее правильно решить?
for(int e=0; e<elements_total; e++)
{
//--- Проверяем только доступные элементы
CElement *el=m_wnd[m_active_window_index].m_elements[e];
if(!el.IsVisible() || !el.IsAvailable() || el.IsLocked())
continue;
//--- Обработка событий в обработчике элементов
el.OnEvent(m_id,m_lparam,m_dparam,m_sparam);
}
3. В той же строке: когда я заменяю "el.IsLocked()" на "CElementBase::IsLocked" : ошибка "IsLocked - доступ к нестатическому члену функции".
4. Чем заменить "m_windows[0].IsLocked()"?
//--- Выйти, если интерфейс не созданif(windows_total<1)
return;
//--- Изменить размер всех элементов заблокированной формы, если включен один из режимов.if(m_windows[0].IsLocked() && (m_windows[0].AutoXResizeMode() || m_windows[0].AutoXResizeMode()))
{
Плз, помогите! Было бы здорово использовать эту библиотеку. Но сначала нужно решить эти несколько вопросов.
А как сделать то же, не правя библиотеку?
В файле Element.mqh в конструкторе CElement заменить значения m_font и m_font_size.
А как сделать то же, не правя библиотеку?
А в чем проблема каждому элементу указывать эти значения при создании?
Библиотека EasyAndFastGUI для создания графических интерфейсов:
Автор: Анатолий Кажарский
Привет всем,
Я попробовал этот исходник, он работает. Действительно отличная работа, спасибо!
Я попытался адаптировать его под свои нужды, но ничего не вышло. После нескольких часов отладки я нашел решение:
Когда имя файла ExampleEA.mq5 длиннее 14 символов, то при создании комбобокса функция ResourceCreate() внутри класса Canvas завершается с ошибкой 4016 (ресурс не найден).
Известно ли такое поведение? Поскольку я не знаю точных обстоятельств, приводящих к этой ошибке, я пытаюсь выяснить, как предотвратить подобные ошибки.
Обновление: я нашел соответствующее обсуждение с быстрым решением здесь.
После одного из обновлений сократили буфер для строки глобальной переменной терминала и уже некоторое время выдаёт критическую ошибку.
Можно вылечить лайф-хаком не зарываясь в код, просто переименовав запускной файл советника, сократив его имя
например с такого: MacdSampleCFrames.ex5 до просто Macd.ex5
Как задать параметры текстовой метки Anchor(ANCHOR_RIGHT)?
Это ошибка! ?
Gustavo Enedir Hennemann:
Hello,
I didn't get it. What to do?
Замените из m_main на CElementBase::, где появляется предупреждение.
Привет @Mikhail Sergeev, @Paulo Campello!
Ребята,
Я сократил количество предупреждений с 18 до 6.
И эти 6 сводятся к 4 следующим типам проблем. Не могли бы вы посоветовать, как правильно их исправить?
1. Как правильно заменить на "CElementBase::"?
2. И вот здесь - когда я заменяю "el." на "CElementBase::" - возникает новая ошибка компиляции "IsAvailable - access to non-staticmember of function" - как ее правильно решить?
3. В той же строке: когда я заменяю "el.IsLocked()" на "CElementBase::IsLocked" : ошибка "IsLocked - доступ к нестатическому члену функции".
4. Чем заменить "m_windows[0].IsLocked()"?
Плз, помогите! Было бы здорово использовать эту библиотеку. Но сначала нужно решить эти несколько вопросов.
Спасибо!