Discusión sobre el artículo "Interfaces gráficas X: Actualizaciones para la librería Easy And Fast (build 2)" - página 3

 
Alexey Oreshkin:
¿ Cuándo esperar la actualización ?

Si la necesitas con urgencia, puedes añadir tú mismo los siguientes cambios:

1. En el archivo Defines.mqh, añade un nuevo identificador:

#define  ON_CLICK_TAB               (26) // Ficha Cambiar

//---

2. 2. En las clases CTabs y CIconTabs (ficheros Tabs.mqh e IconTabs.mqh), en el método ShowTabElements(), añade una línea como se muestra en el siguiente listado:

//+------------------------------------------------------------------+
//| Sólo muestra los elementos de la pestaña seleccionada ||
//+------------------------------------------------------------------+
void CTabs::ShowTabElements(void)
  {
//--- Salir si las pestañas están ocultas
   if(!CElement::IsVisible())
      return;
//--- Comprobación del índice de la pestaña seleccionada
   CheckTabIndex();
//---
   for(int i=0; i<m_tabs_total; i++)
     {
      //--- Obtener el número de elementos adjuntos a la ficha
      int tab_elements_total=::ArraySize(m_tab[i].elements);
      //--- Si esta pestaña está resaltada
      if(i==m_selected_tab)
        {
         //--- Mostrar elementos de la pestaña
         for(int j=0; j<tab_elements_total; j++)
            m_tab[i].elements[j].Show();
        }
      //--- Ocultar elementos de pestañas inactivas
      else
        {
         for(int j=0; j<tab_elements_total; j++)
            m_tab[i].elements[j].Hide();
        }
     }
//--- Enviar un mensaje al respecto
   ::EventChartCustom(m_chart_id,ON_CLICK_TAB,CElement::Id(),m_selected_tab,"");
  }

//---

3. Ahora el evento con el identificador ON_CLICK_TAB puede ser aceptado en el manejador de la clase personalizada.

Ejemplo:

//+------------------------------------------------------------------+
//| Controlador de eventos gráficos|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
//--- Evento de pulsación de pestaña
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_TAB)
     {
      //--- Si ha pulsado el botón de radio
      if(m_tabs.SelectedTab()==0)
        {
         switch(m_radio_buttons1.SelectedButtonIndex()){
            case  0:
               m_canvas_table1.Show();
               m_canvas_table11.Hide();
               m_canvas_table111.Hide();
               ModifyCanvasTable1(0);
            break;
            case  1:
               m_canvas_table1.Hide();
               m_canvas_table11.Show();
               m_canvas_table111.Hide();
               ModifyCanvasTable1(1);                
            break;
            case  2:
               m_canvas_table1.Hide();
               m_canvas_table11.Hide();
               m_canvas_table111.Show();
               ModifyCanvasTable1(2);               
            break;                        
         }       
         return;
        }
      return;
     }
  }
 
Gracias, funciona.
He encontrado un error más - iniciamos la herramienta, alejamos el panel y empezamos a pulsar los botones de selección. Cuando se dibuja la tabla, al principio se empieza a dibujar desde el borde izquierdo, y luego como que sube hasta las coordenadas requeridas.
 
Alexey Oreshkin:
Gracias, funciona.
He encontrado un error más - iniciamos la herramienta, alejamos el panel y empezamos a pulsar los botones de selección. Cuando se dibuja la tabla, al principio se empieza a dibujar desde el borde izquierdo, y luego como que sube hasta las coordenadas requeridas.

Sí, esto existe. Usando este tipo de tabla como ejemplo, añade una línea al método CCanvasTable::Show() en el archivo CanvasTable.mqh como se muestra a continuación:

//+------------------------------------------------------------------+
//|| Muestra el elemento|
//+------------------------------------------------------------------+
void CCanvasTable::Show(void)
  {
//--- Salir si el elemento ya es visible
   if(CElement::IsVisible())
      return;
//--- Hacer visibles todos los objetos
   m_area.Timeframes(OBJ_ALL_PERIODS);
   m_canvas.Timeframes(OBJ_ALL_PERIODS);
   m_scrollv.Show();
   m_scrollh.Show();
//--- Estado de visibilidad
   CElement::IsVisible(true);
//--- Mover un elemento
   Moving(m_wnd.X(),m_wnd.Y());
  }

//---

Si este problema se produce con otros elementos, añada la misma línea a su método Show(). Todas las clases de elementos tendrán esta corrección en la próxima actualización.

 
Hola, estoy siguiendo su trabajo, y estoy muy agradecido.

¿Ya desarrollado o ver algo que puede trabajar con tabulaciones o Focus on Controls en el formulario.

Necesito cambiar las ediciones después de insertar una entrada en un CEdit o CSpinEdit y pulse Intro o pulse TAB, quiero pasar a la siguiente edición, para una mejor usabilidad en mi programa.

¿Puedes ayudarme o guiarme donde buscar?

Muchas gracias por tu contribución a la comunidad.
 
RODRIGO CAMPOS FIDELIS:

Ya has desarrollado o visto algo que pueda trabajar con Tabulaciones o Focus on Controls en el formulario.

Necesito cambiar las ediciones después de insertar un input en un CEdit o CSpinEdit y pulsar Enter o pulsar TAB, quiero pasar al siguiente Edit, para una mejor usabilidad en mi programa.

Por el momento esto no es posible. Voy a pensar en cómo implementarlo.
 
Anatoli Kazharski:
De momento no es posible. Pensaré en cómo implementarlo.
Anatoli Kazharski, estoy pensando en eso. Hay alguna manera para que pueda activar el modo de edición por código, al igual que cuando no son ReadOnly y hacemos un doble clic en el CEdit y se vuelven azules y seleccionados.
O, de alguna manera para que pueda pedir una entrada por splash, cuadro de mensaje o cualquier ventana solicitada automáticamente cuando se ejecuta el código.

Estoy pensando en algunas posibilidades, y realmente no quiero usar DLL, no soy tan profesional todavía. Pero realmente tengo voluntad. Si usted me tiene algunas direcciones o ideas que realmente puede mejorar nuestro código.
 

Estimado Anatoli, ¡muchas gracias por tu esfuerzo!

Sólo quiero señalarte que hay un error tipográfico en MenuItem.mqh, línea 237, que hace que no se pueda compilar con éxito:

" > The type of the menu item can be set using the CMenuItem::TypeMenuItem()") method");

debería decir en su lugar

" > The type of the menu item can be set using the CMenuItem::TypeMenuItem() method");

¿correcto?

 
¿Es esta la última versión de MT4?
 

La edición siempre parpadea.

https://www.mql5.com/en/forum/274301

 
¿Cómo crear sólo etiquetas?