Обсуждение статьи "Графические интерфейсы XI: Интеграция графической стандартной библиотеки (build 16)" - страница 7

 

Я воспроизвел. Надо изменить размер панели, когда ползунок наверху самом. После этого зависает ползунок да и все элементы на панели.

[Удален]  

Здравствуйте

кто нибудь нашёл причину глюка постом выше?

выдаёт ошибку "array out of range in 'WndEvents.mqh' (287,72)"

 
Спартак Угланов:

Здравствуйте

кто нибудь нашёл причину глюка постом выше?

выдаёт ошибку "array out of range in 'WndEvents.mqh' (287,72)"

воткни там проверку на выход за пределы и все

[Удален]  
Konstantin:

воткни там проверку на выход за пределы и все

мысль конечно интересная, а как?


      int available_elements_total=CWndContainer::AvailableElementsTotal(m_active_window_index);
      int ass = ArraySize(m_wnd[m_active_window_index].m_available_elements);
      Print("ass = ",ass," available_elements_total = ",available_elements_total);
      for(int e=0; e<available_elements_total; e++)
        {
         CElement *el=m_wnd[m_active_window_index].m_available_elements[e];


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

(пример TradePanelTest из цикла статей)

 
Спартак Угланов:

мысль конечно интересная, а как?



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

(пример TradePanelTest из цикла статей)

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

[Удален]  
Konstantin:

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

перенёс проект в папку с другим именем и файл индикатора переименовал, работает без ошибок

видно в понедельник я родился :О)

 
Anatoli Kazharski:

 

 

В последних билдах мы добавили в компилятор сообщение для тех случаев, когда в потомке происходит перегрузка метода предка:

deprecated behavior, hidden method calling will be disabled in a future MQL compiler version    

Пример

struct SFoo
  {
   static void func(int)
     {
      Print(__FUNCSIG__);
     }
  };
 
struct SBar : SFoo
  {
   static void func(double)
     {
      Print(__FUNCSIG__);
     }     
  };

void OnStart()
  {
   SBar::func(_Digits);       // !!! будет вызвана SFoo::func(int) - она более подходящая
  }

В данном случае в классе-потомке SBar происходит вызов функции func(int) предка SFoo, так как компилятор не нашел его в потомке.  В потомке есть только функция func(double), и компилятор пытается найти функцию с подходящим параметром в дереве наследования.

То есть компилятор MQL5 вместо переопределения метода в потомке производит перегрузку. В начале развития языка такое послабление компилятора MQL5 не считалось критическим. Но в будущем это может быть изменено, поэтому теперь выдается явное предупреждение,  чтобы разработчики программм на MQL5 приняли во внимание и исправили свои коды.

Строго говоря, переопределение немного более широкое понятие, вы можете сами поискать в интернете разницу между перегрузкой и переопределением

 
MetaQuotes Software Corp.:

ничего непонятно, но очень интересно! компилятор ругается на несколько функций, вот одна из них, в каком месте ему не нравится?

//+------------------------------------------------------------------+
//| Доступность элемента                                             |
//+------------------------------------------------------------------+
void CElement::IsAvailable(const bool state)
  {
//--- Выйти, если уже установлено
   if(state==CElementBase::IsAvailable())
      return;
//--- Установить
   CElementBase::IsAvailable(state);
//--- Остальные элементы
   int elements_total=ElementsTotal();
   for(int i=0; i<elements_total; i++)
      m_elements[i].IsAvailable(state);
//--- Установить приоритеты на нажатие левой кнопкой мыши
   if(state)
      SetZorders();
   else
      ResetZorders();
  }
 
Pavel Kolchin:

ничего непонятно, но очень интересно! компилятор ругается на несколько функций, вот одна из них, в каком месте ему не нравится?

Потому что есть еще и

bool              IsAvailable(void)                         const { return(m_is_available);               }


Пробовал менять на

   virtual void      SetAvailable(const bool state)                  { m_is_available=state;                 }
   bool              IsAvailable(void)                         const { return(m_is_available);               }

все норм )

И такое же нужно будет с остальными провернуть )