Когда пытаюсь загрузить новый шаблон на график с с этим советником - график закрывается. Пофиксил двоение при смене тф и символа, но это не выходит. Где-то видел решение с добавлением каких-то таймеров, не помогло. Код следующий:
Проверил Ваш код у себя - шаблон с советником загружается нормально, график не закрывается. Дублирование объектов видимо "профиксили" не до конца т.к. при сохранении шаблона сохраняются и графические объекты, созданные советником. Соответственно при загрузке шаблона появляются дубли объектов панели.
Я, конечно, дико извиняюсь за свое невежество и выложенный ниже код, но мне это помогло. Не могу вникнуть и разобраться никак.
В ручную дважды удаляю все объекты панели.
#include <Controls\Dialog.mqh> #include <Controls\CheckBox.mqh> extern int font_size = 8; // Размер шрифта extern color cl = clrWhite; // Цвет надписей extern int dov = 10; // Доверительный интервал в пипсах //+------------------------------------------------------------------+ //| defines | //+------------------------------------------------------------------+ //--- indents and gaps #define INDENT_LEFT (3) // indent from left (with allowance for border width) #define INDENT_TOP (-155) // indent from top (with allowance for border width) #define INDENT_RIGHT (11) // indent from right (with allowance for border width) #define INDENT_BOTTOM (1) // indent from bottom (with allowance for border width) #define CONTROLS_GAP_X (5) // gap by X coordinate #define CONTROLS_GAP_Y (5) // gap by Y coordinate //--- for buttons #define BUTTON_WIDTH (100) // size by X coordinate #define BUTTON_HEIGHT (20) // size by Y coordinate //--- for the indication area #define EDIT_HEIGHT (20) // size by Y coordinate //--- for group controls #define GROUP_WIDTH (150) // size by X coordinate #define LIST_HEIGHT (179) // size by Y coordinate #define RADIO_HEIGHT (56) // size by Y coordinate #define CHECK_HEIGHT (93) // size by Y coordinate bool flag_1 = true; bool flag_2 = true; bool flag_3 = true; bool flag_4 = true; bool flag_5 = true; bool flag_6 = true; bool flag_7 = true; bool flag_1_1 = true; bool flag_2_1 = true; bool flag_3_1 = true; bool flag_4_1 = true; bool flag_5_1 = true; bool flag_6_1 = true; bool flag_7_1 = true; int p = 1; static datetime NewTime=0; int size_1,open, body_size, high_size, low_size; double percent, percent_2; string name_1; //+------------------------------------------------------------------+ //| Class CControlsDialog | //| Usage: main dialog of the Controls application | //+------------------------------------------------------------------+ class CControlsDialog : public CAppDialog { private: CCheckBox m_check_box1; CCheckBox m_check_box2; CCheckBox m_check_box3; CCheckBox m_check_box4; CCheckBox m_check_box5; CCheckBox m_check_box6; CCheckBox m_check_box7; public: CControlsDialog(void); ~CControlsDialog(void); //--- create bool isCreate; virtual bool Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2); //--- chart event handler virtual bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam); protected: //--- create dependent controls bool CreateCheckBox1(void); bool CreateCheckBox2(void); bool CreateCheckBox3(void); bool CreateCheckBox4(void); bool CreateCheckBox5(void); bool CreateCheckBox6(void); bool CreateCheckBox7(void); //--- handlers of the dependent controls events void OnChangeCheckBox1(void); void OnChangeCheckBox2(void); void OnChangeCheckBox3(void); void OnChangeCheckBox4(void); void OnChangeCheckBox5(void); void OnChangeCheckBox6(void); void OnChangeCheckBox7(void); }; //+------------------------------------------------------------------+ //| Event Handling | //+------------------------------------------------------------------+ EVENT_MAP_BEGIN(CControlsDialog) ON_EVENT(ON_CHANGE,m_check_box1,OnChangeCheckBox1) ON_EVENT(ON_CHANGE,m_check_box2,OnChangeCheckBox2) ON_EVENT(ON_CHANGE,m_check_box3,OnChangeCheckBox3) ON_EVENT(ON_CHANGE,m_check_box4,OnChangeCheckBox4) ON_EVENT(ON_CHANGE,m_check_box5,OnChangeCheckBox5) ON_EVENT(ON_CHANGE,m_check_box6,OnChangeCheckBox6) ON_EVENT(ON_CHANGE,m_check_box7,OnChangeCheckBox7) EVENT_MAP_END(CAppDialog) //+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ CControlsDialog::CControlsDialog(void) { isCreate = false; } //+------------------------------------------------------------------+ //| Destructor | //+------------------------------------------------------------------+ CControlsDialog::~CControlsDialog(void) { isCreate = false; } //+------------------------------------------------------------------+ //| Create | //+------------------------------------------------------------------+ bool CControlsDialog::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2) { for(int i = 0; i <= 21; i ++) { if(StringFind(ObjectName(i),"Back",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"Border",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"CPR",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"Caption",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"Inside",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"MinMax",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"Outside",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"PPR",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"Pinbar",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"TBH",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"Rails",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"RailsLabel",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"CPRLabel",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"ClientBack",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"Close",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"PPRLabel",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"PinBarLabel",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"Bar Button",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"Bar Label",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"PinBarButton",0) != -1) ObjectDelete(ObjectName(i)); if(StringFind(ObjectName(i),"TBH\TBLButton",0) != -1) ObjectDelete(ObjectName(i)); } for(int k = 0; k <= 21; k ++) { if(StringFind(ObjectName(k),"Back",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"Border",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"CPR",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"Caption",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"Inside",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"MinMax",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"Outside",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"PPR",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"Pinbar",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"TBH",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"Rails",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"RailsLabel",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"CPRLabel",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"ClientBack",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"Close",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"PPRLabel",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"PinBarLabel",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"Bar Button",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"Bar Label",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"PinBarButton",0) != -1) ObjectDelete(ObjectName(k)); if(StringFind(ObjectName(k),"TBH\TBLButton",0) != -1) ObjectDelete(ObjectName(k)); } isCreate = true; if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2)) return(false); return(true); } //+------------------------------------------------------------------+ //| Global Variables | //+------------------------------------------------------------------+ CControlsDialog ExtDialog; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- create application dialog if (!ExtDialog.isCreate) { if(!ExtDialog.Create(0,"Настройки",0,40,40,205,220)) return(INIT_FAILED); //--- run application if(!ExtDialog.Run()) return(INIT_FAILED); } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { if ((reason != REASON_PARAMETERS) && (reason !=REASON_CHARTCHANGE) && (reason !=REASON_ACCOUNT) && (reason != REASON_TEMPLATE)) { ExtDialog.Destroy(reason); } if(reason == REASON_TEMPLATE) { ExtDialog.Destroy(reason); } }
А что тут разбираться, при смене шаблона панель не деинициализировалась, но новая создавалась. Удалить надо было это
void OnDeinit(const int reason) { if ((reason != REASON_PARAMETERS) && (reason !=REASON_CHARTCHANGE) && (reason !=REASON_ACCOUNT) && (reason != REASON_TEMPLATE)) { ExtDialog.Destroy(reason); } }
А что тут разбираться, при смене шаблона панель не деинициализировалась, но новая создавалась. Удалить надо было это
Это было добавлено уже в процессе экперементов.
Удаление этой части коды не исправляет проблемы.
Это было добавлено уже в процессе экперементов.
Удаление этой части коды не исправляет проблемы.
а, кстати да, вспомнил, была похожая проблема при шаблонах. Тоже решилась предварительным удалением всех объектов в ОнИнит, но не уверен что это лучшее решение.
У вас как то зависит от того - был ли сов на графике до применения шаблона или не был, а лишь в шаблоне прописан?
а, кстати да, вспомнил, была похожая проблема при шаблонах. Тоже решилась предварительным удалением всех объектов в ОнИнит, но не уверен что это лучшее решение.
У вас как то зависит от того - был ли сов на графике до применения шаблона или не был, а лишь в шаблоне прописан?
Если шаблоне прописан - то просто двоит его.
Если поставлен на график, а сверху заливается шаблон с совой - то закрывает график.
Удаление объектов панели перед креейтом (не в онИнит) и строками
if(reason == REASON_TEMPLATE) { ExtDialog.Destroy(reason); }
пофиксил это дело. Вроде, все работает норм. Костыльная тема, конечно, и явно не лучшее решение.
CControlsDialog *ExtDialog;
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет, много посмотрел веток на похожую тематику, пробовал предложенные методы и их модификацию. Не помогло. Как можно это исправить:
Создана панель по стандартной библиотеке в виде советника. Когда пытаюсь загрузить новый шаблон на график с с этим советником - график закрывается. Пофиксил двоение при смене тф и символа, но это не выходит. Где-то видел решение с добавлением каких-то таймеров, не помогло. Код следующий: