Discusión sobre el artículo "Interfaces gráficas XI: Integración de la librería gráfica estándar (build 16)" - página 7

 

Lo he reproducido. Tengo que redimensionar el panel cuando el deslizador está en la parte superior del panel. Después de que el control deslizante y todos los elementos en el panel se cuelga.

[Eliminado]  

Hola

¿alguien ha encontrado la causa del fallo del post anterior?

Me sale el error"array out of range in 'WndEvents.mqh' (287,72)"

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

Hola

¿Alguien ha encontrado la causa del fallo en el post anterior?

Me sale el error "array out of range in 'WndEvents.mqh' (287,72)"

meto una comprobación de fuera de rango y listo.

[Eliminado]  
Konstantin:

sólo hay que poner un control de rebasamiento y ya está.

Es una idea interesante, pero ¿cómo?


      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 elementos, no debería haber fuera de rango, teóricamente.

(TradePanelTest ejemplo de la serie de artículos)

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

Es una idea interesante, pero ¿cómo?



12 elementos, no debería haber fuera de rango, teóricamente.

(TradePanelTest ejemplo de la serie de artículos)

Bueno, si hay un error, significa que hay un error, ejecutarlo con un depurador, es la forma más segura de ver lo que está pasando allí.

 
Anatoli Kazharski:


 

En versiones recientes, hemos añadido un mensaje al compilador para aquellos casos en los que un método ancestro está sobrecargado en un descendiente:

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

Ejemplo

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

void OnStart()
  {
   SBar::func(_Digits);       // !!! se llamará SFoo::func(int) - es más apropiado.
  }

En este caso, la función func(int) del ancestro SFoo se llama en la clase descendiente SBar, porque el compilador no la ha encontrado en el descendiente, que sólo tiene la función func(double), y el compilador intenta encontrar una función con un parámetro adecuado en el árbol de herencia.

Es decir, el compilador MQL5 realiza la sobrecarga en lugar de sobrescribir el método en el descendiente. Al principio del desarrollo del lenguaje, esta relajación del compilador MQL5 no se consideró crítica. Pero es posible que cambie en el futuro, por lo que ahora se lanza una advertencia explícita a los desarrolladores de programas MQL5 para que lo tengan en cuenta y corrijan sus códigos.

Estrictamente hablando, overriding es un concepto un poco más amplio, puedes buscar la diferencia entre overloading y overriding en Internet
.

 
MetaQuotes Software Corp.:

No entiendo nada, ¡pero es muy interesante! El compilador jura varias funciones, aquí hay una de ellas, ¿dónde le disgusta?

//+------------------------------------------------------------------+
//| La disponibilidad del elemento|
//+------------------------------------------------------------------+
void CElement::IsAvailable(const bool state)
  {
//--- Salir si ya está configurado
   if(state==CElementBase::IsAvailable())
      return;
//--- Set
   CElementBase::IsAvailable(state);
//--- Otros elementos
   int elements_total=ElementsTotal();
   for(int i=0; i<elements_total; i++)
      m_elements[i].IsAvailable(state);
//--- Establecer prioridades para los clics del botón izquierdo del ratón
   if(state)
      SetZorders();
   else
      ResetZorders();
  }
 
Pavel Kolchin:

No entiendo nada, ¡pero es muy interesante! El compilador jura varias funciones, aquí hay una de ellas, ¿dónde le disgusta?

Porque también está

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


He intentado cambiarla por

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

está bien )

Y habrá que hacer lo mismo con las otras )

 
Oleksii Chepurnyi:

Intenté cambiar el archivo ElementBase.mqh, y me regaña aún más.