Librerías: EasyAndFastGUI - librería para crear interfaces gráficas - página 20

 

Hoy empecé a usar esta librería, build de 2019.03.13 16:43 (creo que build 16). Pues la estoy usando para crear tablas, funciona casi a la perfección, he usado como referencia los artículos:

https://www.mql5.com/es/articles/2500#para6

https://www.mql5.com/es/articles/2897#para7

Para mí es importante tener la función de clasificación, por lo que, yo uso la biblioteca de acuerdo a las instrucciones en el artículo "X". Si utilizo esa build (build 6) la tabla funciona muy bien, pero si utilizo la última build (build 16), la tabla no ordena los elementos cuando hago click en las celdas de cabecera.

Investigando las principales diferencias, obtuve esto en el archivo Table.mqh.


Esto es en la build 6:

void CTable::SortData(const uint column_index=0)
{
   ...
   //--- Almacena el índice de la última columna de datos ordenada
   m_is_sorted_column_index=(int)column_index;
   //--- Clasificación
   QuickSort(first_index,last_index,column_index,m_last_sort_direction);
   //--- Actualizar la tabla
   UpdateTable();
   //--- Establecer el icono de acuerdo con la dirección de clasificación
   m_sort_arrow.State((m_last_sort_direction==SORT_ASCEND)? true : false);
}

Esto es en la build 16:

void CTable::SortData(const uint column_index=0,const int direction=WRONG_VALUE)
{
   ...
   //--- Запомним индекс последнего отсортированного столбца данных
   m_is_sorted_column_index=(int)column_index;
   //--- Сортировка
   QuickSort(first_index,last_index,column_index,m_last_sort_direction);
}


En la nueva build no existe el método "Update", por lo que creo que esta es la razón por la que no se ordena.


Por lo tanto, hice este cambio y al parecer funcionó:

void CTable::SortData(const uint column_index=0,const int direction=WRONG_VALUE)
{
   ...
   //--- Запомним индекс последнего отсортированного столбца данных
   m_is_sorted_column_index=(int)column_index;
   //--- Сортировка
   QuickSort(first_index,last_index,column_index,m_last_sort_direction);
   
   //--- Actualizar la tabla
   Update(true);
}



PD: los comentarios en ruso no ayudan demasiado.

Graphical Interfaces VII: the Tables Controls (Chapter 1)
Graphical Interfaces VII: the Tables Controls (Chapter 1)
  • www.mql5.com
The first article Graphical Interfaces I: Preparation of the Library Structure (Chapter 1) explains in detail what this library is for. You will find a list of articles with links at the end of each chapter. There, you can also download a complete version of the library at the current stage of development. The files must be placed in the same...
 

¿Dónde está la clase Label en la biblioteca? Cómo crear una sola etiqueta?

 

¡Di Gustavo! ¿Belleza?

Yo también me estaba devanando los sesos para hacer funcionar la ordenación de la tabla gráfica y lo he conseguido por casualidad...

Es necesario tener la tabla actualizada en el evento ON_SORT_DATA de tu "program.mqh", algo así:

// --- Eventos de tabla ordenados
if (id == CHARTEVENT_CUSTOM + ON_SORT_DATA)
{
if (lparam == m_table_symb.Id ())
{
m_table_symb.Update (true);
return;
}
// ---
return;
}


¡Espero que esto ayude!

¡¡¡Aquí funcionó perfecto !!!

T +

Raul

 
raulpjr:

Este es un foro en inglés. Por favor, escriba sólo en inglés.

Utiliza la herramienta de traducción del sitio si es necesario.

Cuando publiques código, utiliza el botón de código (Alt +S).

He editado tu mensaje esta vez.

 

Si construyo ExampleEAF de la biblioteca como un indicador en MT4, el indicador se bloquea con un error cuando intento arrastrar la ventana en el gráfico

Funciona bien en MT5

array out of range in 'WndEvents.mqh' (288,72)

Si añades una comprobación de desbordamiento de rango en el primer ciclo, entonces arrastrar funciona.

void CWndEvents::CheckElementsEvents(void)
  {
//--- Manejo del evento de movimiento del cursor del ratón
   if(m_id==CHARTEVENT_MOUSE_MOVE)
     {
      //--- Salir si el formulario está en otra subventana del gráfico
      if(!m_windows[m_active_window_index].CheckSubwindowNumber())
         return;
      //--- Compruebe sólo los elementos disponibles
      int available_elements_total=CWndContainer::AvailableElementsTotal(m_active_window_index);
      for(int e=0; e<available_elements_total; e++)
        {
         ¡¡¡// !!! Comprobación adicional
         if (e >= ArraySize(m_wnd[m_active_window_index].m_available_elements)) continue;
         CElement *el=m_wnd[m_active_window_index].m_available_elements[e];
         //--- Comprobación del foco sobre los elementos
         el.CheckMouseFocus();
         //--- Manejo de Eventos
         el.OnEvent(m_id,m_lparam,m_dparam,m_sparam);
        }
     }
//--- Todos los eventos excepto el movimiento del cursor del ratón
   else
     {
      int elements_total=CWndContainer::ElementsTotal(m_active_window_index);
      for(int e=0; e<elements_total; e++)
        {
         //--- Compruebe sólo los elementos disponibles
         CElement *el=m_wnd[m_active_window_index].m_elements[e];
         if(!el.IsVisible() || !el.IsAvailable() || el.IsLocked())
            continue;
         //--- Manejo de eventos en el item handler
         el.OnEvent(m_id,m_lparam,m_dparam,m_sparam);
        }
     }
//--- Dirigir el evento al archivo de la aplicación
   OnEvent(m_id,m_lparam,m_dparam,m_sparam);
  }

pero "expandir" la ventana a toda la zona del gráfico y volver atrás deja de funcionar.

¿Pueden decirme cómo solucionar este problema para que funcione normalmente también en MT4?

¿Cuál es la diferencia? No hay ninguna advertencia durante la compilación en MT4, no sé en qué dirección indagar.


También en MT4 al compilar como indicador no funciona el cambio de foco en el sentido de que si abres una lista desplegable y haces click en algún lado, la lista no se cierra y el foco de entrada no cambia a otro elemento, en modo Experto funciona normalmente.

En MT5 tanto el Asesor Experto como el indicador funcionan normalmente

 
Buenas tardes, sugerencia de alguna manera es posible implementar copiar y pegar texto desde campos de texto.
 

Otro fallo interesante con las tablas.

Después de varias entradas los caracteres empiezan a duplicarse y luego a triplicarse (ver gif).

¿Cuál puede ser el problema?

Archivos adjuntos:
ScreenFlow.gif  28 kb
 

Parece que CreateTextEdit no admite entradas en chino.


Parece que CreateTextEdit no admite la entrada en chino.

 

Hola

¿Dónde puedo descargar la versión MT4 de esta biblioteca?

 
¿Podrían decirme cómo cambiar el tipo de letra por defecto de un programa (Expert Advisor) que utiliza esta librería? Es la que imprime todo empezando por el título en la cabecera del programa. Al menos cambiar el tamaño (aumentar).