Снова работаю с CCheckGroup и вижу, что не хватает метода редактирования текста элементов. Например при создании вот так:
а в процессе нужно менять на :
посмотрел исходники, вариантов особо нет, или писать все свое или все таки использовать СБ, но с учетом, что правки в СБ после обновления терминала будут уничтожены, придется применить антипаттерн "Public Morozov"
в пример из справки добавить:
#property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property description "Control Panels and Dialogs. Demonstration class CCheckGroup" #include <Controls\Dialog.mqh> #define private public #include <Controls\CheckGroup.mqh> #undef private
для проверки добавил в метод OnChangeCheckGroup:
void CControlsDialog::OnChangeCheckGroup(void) { Comment(__FUNCTION__+" : Value="+IntegerToString(m_check_group.Value())); for(int i=m_check_group.m_strings.Total()-1;i>=0;i--) { m_check_group.m_strings.Update(i,(string)rand()); } }
имхо, наименее трудоемкое и довольно надежное решение.... НО если не косячить в дальнейшем! )))
посмотрел исходники, вариантов особо нет, или писать все свое или все таки использовать СБ, но с учетом, что правки в СБ после обновления терминала будут уничтожены, придется применить антипаттерн "Public Morozov"
в пример из справки добавить:
для проверки добавил в метод OnChangeCheckGroup:
имхо, наименее трудоемкое и довольно надежное решение.... НО если не косячить в дальнейшем! )))
Конечно самый правильный вариант - это наследование. НО: чтобы управлять элементами, нужно иметь доступ к объектам m_strings, m_values и m_states - а они объявлены в секции private:
class CCheckGroup : public CWndClient { private: //--- dependent controls CCheckBox m_rows[]; // array of the row objects //--- set up int m_offset; // index of first visible row in array of rows int m_total_view; // number of visible rows int m_item_height; // height of visible row //--- data CArrayString m_strings; // array of rows CArrayLong m_values; // array of values CArrayInt m_states; // array of states long m_value; // current value int m_current; // index of current row in array of rows
и поэтому недоступны извне:
- private – разрешает доступ к переменным и методам класса только из методов данного класса.
- www.mql5.com
Можно попробовать переопределить закрытые секции в публичные
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Вопросы от начинающих MQL5 MT5 MetaTrader 5
Igor Makanu, 2020.01.16 18:57
#define private public #include <Controls\Dialog.mqh> // тут весь Ваш класс который наследуете от CAppDialog #undef privatec undef поэкспериментируйте, можно после макроподстановки отменить ее и закрыть все теперь публичные методы CAppDialog в уже своем классе, чтобы в дальнейшем было удобно код писать
дал готовое решение, даже не поленился проверил
есть конечно надежда, что разработчики опять создадут новую СБ, с учетом пожеланий
обещанного три года ждут... народная мудрость
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
CCheckGroup -
То есть если брать отдельно переключатель (CCheckBox) - тогда доступен метод CCheckBox.Text, а как получить текст если имеем дело с группой переключателей (CCheckGroup)?