//+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2020, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ #ifndef CTRL_PANEL_BASE_MQH #define CTRL_PANEL_BASE_MQH //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CCtrlPanelBase { public: CCtrlPanelBase(); CCtrlPanelBase(const string param); //--- Инициализация/деинициализация virtual bool OnInitEvent(void); virtual void OnDeinitEvent(const int reason) {}; //--- Таймер virtual void OnTimerEvent(void) {}; //--- Обработчик тиков virtual void OnTickCalculateEvent() {}; virtual void DrawPanelInfo() {}; bool IsReadyForUpdate() {return _readyForUpdate;}; virtual bool IsEnableTickCalculateEvent() {return (!kernel_account::is_testing()||kernel_account::is_visual_mode());}; // Разрешает или запрещает обработку на каждом тике. //--- Обработчик события графика virtual void OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam) {}; public: string GetParamString(string name,string def_value); int GetParamInt(string name,int def_value); double GetParamDouble(string name,double def_value); bool GetParamBool(string name,bool def_value); color GetParamColor(string name,color def_value); string PrepStr(const string value, const string postfix="",const string prefix="",const string value_for_non="",const string null_value=""); protected: void ParsingParam(const string param); protected: bool _readyForUpdate; map _param; }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ CCtrlPanelBase::CCtrlPanelBase() : _readyForUpdate(false) { ParsingParam(ShowCommentsParam); }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ CCtrlPanelBase::CCtrlPanelBase(const string param) : _readyForUpdate(false) { ParsingParam(param); // системные параметры ParsingParam(ShowCommentsParam); // пользовательские параметры }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CCtrlPanelBase::OnInitEvent() { string str=GenerateHeader(); Comment(str); return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CCtrlPanelBase::ParsingParam(const string param) { string sep1=";",sep2="="; // разделитель в виде символа ushort u_sep1, u_sep2; // код символа разделителя string result[],result2[]; // массив для получения строк //--- получим код разделителя u_sep1=StringGetCharacter(sep1,0); u_sep2=StringGetCharacter(sep2,0); //--- разобьем строку на подстроки int k=StringSplit(param,u_sep1,result); //--- теперь выведем все полученные строки if(k==0) return; for(int i=0; i