Смена ТФ - страница 2

 
Maksim Neimerik:

а можете подробнее об этом рассказать? Указатели - это если бы я использовал классы, верно?

поиском по форуму Вы найдеье примеры использования CButton - это обычная кнопка

https://www.mql5.com/ru/docs/standardlibrary/controls/cbutton

 
Igor Makanu:

поиском по форуму Вы найдеье примеры использования CButton - это обычная кнопка

https://www.mql5.com/ru/docs/standardlibrary/controls/cbutton

я не использую классы...

 
Maksim Neimerik:

я не использую классы...

и ? это ультиматум? )))) 

я предложил простое решение проблемы, Вы не можете поиском найти инфу? 

глянул профиль, Вы довольно успешный продавец, подозреваю, что обучению подлежите?

в общем дело Ваше, учиться, или нет, исходников нет, видимо это Ваш способ получения информации, обсуждать то что? - решайте проблему самостоятельно, если СБ не используйте, то высока вероятность, что Ваши кнопки это пример из справки, тогда могу лишь предложить сохранять статус кнопки в статической переменной, и проверять все это после создания кнопки

удачи!

 
#define START_FLAG_FIRST_START      0x1
#define START_FLAG_CHANGE_PARAM     0x2
#define START_FLAG_CONTROL_SYMBOL   0x4
#define START_FLAG_RESTART START_FLAG_FIRST_START

#define STOP_FLAG_RESTART           0x1

//---------------------------------------------------------------------
ENUM_INIT_RETCODE Start(int fFlag=0){
   static int flag=START_FLAG_FIRST_START;
   static string symbol=NULL;
   ENUM_INIT_RETCODE fRes=INIT_SUCCEEDED;;
   switch (fFlag){
      case START_FLAG_CONTROL_SYMBOL:  if (symbol!=_Symbol) {Stop(STOP_FLAG_RESTART); flag|=START_FLAG_FIRST_START;}
                                       return 0;
      case START_FLAG_RESTART:         flag|=START_FLAG_FIRST_START;
                                       return 0;
      case START_FLAG_CHANGE_PARAM:    flag|=START_FLAG_CHANGE_PARAM;
                                       return 0;}
   if (!(flag&(START_FLAG_FIRST_START|START_FLAG_CHANGE_PARAM))) return INIT_SUCCEEDED;
   //Сюда код общий для смены настроек и для холодного запуска советника
   if (bool(flag&START_FLAG_CHANGE_PARAM)){
      //Сюда код только для смены параметров
      flag&=~START_FLAG_CHANGE_PARAM;
      return fRes;}
   symbol=_Symbol;
   //Сюда код только для холодного запуска
   flag&=~START_FLAG_FIRST_START;
   return fRes;}
//---------------------------------------------------------------------------------
void Deinit(const int reason){
   switch(reason){
      case REASON_PARAMETERS:    ChangeParam(); break;
      case REASON_PROGRAM:
      case REASON_REMOVE:
      case REASON_RECOMPILE:
      case REASON_INITFAILED:
      case REASON_CLOSE:
      case REASON_CHARTCLOSE:    Stop(); break;
      case REASON_TEMPLATE:
      case REASON_ACCOUNT:       Restart(); break;
      case REASON_CHARTCHANGE:   Start(START_FLAG_CONTROL_SYMBOL);}}
//-------------------------------------------------------------------
void ChangeParam(){
   //Сюда действия в Deinite перед сменой параметров
   Start(START_FLAG_CHANGE_PARAM);}
//-------------------------------------------------------------------
void Restart(){
   //Действия совершаемые в деинит только при рестарте робота
   Stop(STOP_FLAG_RESTART);
   Start(START_FLAG_RESTART);}
//-------------------------------------------------------------------
void Stop(int fFlag=0){
   //Общие действия для рестарта и отключения
   if (bool(fFlag&STOP_FLAG_RESTART)) return;
   //Действия совершаемые только при отключении
   }

int OnInit()
  {
   return Start();
  }
  
void OnDeinit(const int reason)
  {
   Stop(reason);
  }
Я вот так все это обрабатываю. Дальше уже сам.
 
Igor Makanu:

и ? это ультиматум? )))) 

я предложил простое решение проблемы, Вы не можете поиском найти инфу? 

глянул профиль, Вы довольно успешный продавец, подозреваю, что обучению подлежите?

в общем дело Ваше, учиться, или нет, исходников нет, видимо это Ваш способ получения информации, обсуждать то что? - решайте проблему самостоятельно, если СБ не используйте, то высока вероятность, что Ваши кнопки это пример из справки, тогда могу лишь предложить сохранять статус кнопки в статической переменной, и проверять все это после создания кнопки

удачи!

Нет, нет)) Никакого ультиматума! Просто я раньше как-то обходился без классов, но, да, я понимаю что в нынешних реалиях без них сложно. Я вот в данном случае не совсем понимаю для чего их использовать? Разве не проще в OnDeinit() просто прописать?:

if(reason!=3&&reason!=5)
{
   /*удалить объекты*/;
}

а в OnInit():

if(ObjectFind(0,"Name")<0)
{
   */создать объект*/;
}

А по поводу классов - я непременно начну их изучать! Спасибо за понимание!

Кстати, может кто подскажет где лучше поискать материалы для изучения классов?

 
Maksim Neimerik:

Кстати, может кто подскажет где лучше поискать материалы для изучения классов?

поиском по статьям ООП - уровень начинающих и весьма не плохо читается, тем более все примеры привязаны к тематике торговли

ну и самое главное, нужно писать руками примеры, тогда очень быстро войдете в эту тему

Maksim Neimerik:

Разве не проще в OnDeinit() просто прописать?:

а в OnInit():

да именно так и работают с обьектами, но главное понимать, что если обьект удалили, то и методы (свойства - переменные) будут удалены, если не удаляем - Ваш код, тогда при вызове OnInit() проверяем существует ли обьект !=NULL и значит его методы будут иметь состояние от прошлого вызова - т.е. ничего не "потеряется". 

Но если без ООП это решать, я выше писал - используйте модификатор static в переменной где храните состояние кнопки - тоже не потеряется

удачи!

 
Igor Makanu:

поиском по статьям ООП - уровень начинающих и весьма не плохо читается, тем более все примеры привязаны к тематике торговли

ну и самое главное, нужно писать руками примеры, тогда очень быстро войдете в эту тему

да именно так и работают с обьектами, но главное понимать, что если обьект удалили, то и методы (свойства - переменные) будут удалены, если не удаляем - Ваш код, тогда при вызове OnInit() проверяем существует ли обьект !=NULL и значит его методы будут иметь состояние от прошлого вызова - т.е. ничего не "потеряется". 

Но если без ООП это решать, я выше писал - используйте модификатор static в переменной где храните состояние кнопки - тоже не потеряется

удачи!

Я Вас понял, спасибо!