Discusión sobre el artículo "Interfaces gráficas X: Selección del texto en el campo de edición multilínea (build 13)" - página 12

 

Mientras realizaba la tarea de añadir/eliminar pestañas dinámicamente y añadir/eliminar gráficos a la matriz de pestañas, me encontré con el problema de la imposibilidad de obtener el nombre de las pestañas en la clase CTabs. En este sentido, sugiero al desarrollador que complemente esta clase con un método para obtener el nombre de la pestaña:

   //--- Establece (1) el texto (nombre de la pestaña) en el índice especificado (2) получает текст (имя вкладки) по указанному индексу
   void              Text(const uint index,const string text);                     // este método es
   string            Text(const uint index) { return m_tab[index].text; }  // no es suficiente
Añadir este método es necesario debido a que incluso heredando de la clase CTabs para complementar los métodos que faltan, será imposible implementar el método sobrecargado Text, debido a que el objeto m_tab[] se encuentra en el área protegida de la clase. Y editar la clase a tu gusto viola el principio de POO.
 
Konstantin:

...

Va a hacer todo lo que escribió en mensajes anteriores.
 
Añadir imágenes a la biblioteca EasyAndFastGUI/MQL5/Images/EasyAndFastGUI/Icons/bmp16. Para los arbitrajistas "de dos patas" será útil no sólo para mí ))
Archivos adjuntos:
 
Anatoli Kazharski:
@Pavel Kolchin, para evitar que las flechas de los tratos cuelguen por encima del panel utiliza el método CWndEvents::ResetWindow().
¿dónde insertarlo?
 
Pavel Kolchin:
¿dónde ponerlo?
Prueba con OnTrade().
 
Anatoli Kazharski:
Prueba OnTrade().


No puedo, falla.

No hay tal evento en el archivo del menú, pero si lo insertas en el archivo principal, falla.

 
Pavel Kolchin:


No puedo, falla

No existe tal evento en el archivo del menú, pero si lo pegas en el archivo principal, falla.

Necesitas crear un método CProgram::OnTradeEvent() en la clase de aplicación personalizada.

Y en el archivo principal debe ser llamado en la función OnTrade():

//+------------------------------------------------------------------+
//| Función comercial|
//+------------------------------------------------------------------+
void OnTrade(void)
  {
   program.OnTradeEvent();
  }

//---

Por ejemplo, tengo este contenido del método CProgram::OnTradeEvent():

//+------------------------------------------------------------------+
//| Evento de transacción comercial|
//+------------------------------------------------------------------+
void CProgram::OnTradeEvent(void)
  {
//--- Envío de un evento a todos los gráficos
   m_events.SendEventToAllCharts(0,ON_TRADE_EVENT,0,0.0,m_program_name);
//--- Establecer las transacciones de la última posición
   if(m_show_deals.CheckButtonState())
      if(m_vdeals.ShowDealsLastPosition())
         ResetWindow();
//--- Comprobación de la distancia de stop loss
   if(m_trailing_stop.CheckButtonState())
      m_ctrade.CheckStopLossSize(::Symbol());
//--- Puesta a cero de variables para operaciones comerciales
   m_ctrade.ZeroCalcPositionVariables();
//--- Inicialización de la matriz de saldo y actualización de las series en el gráfico
   InitBalanceArray();
   m_line_chart.SeriesUpdate(0,m_balance_data,"Balance",clrCornflowerBlue);
  }
 
Anatoli Kazharski:


Añade un poco más encima
public:
   //--- Comercio
   void              OnTradeEvent(void);
y todo funciona )
 
No consigo averiguar cómo vincular el elemento_2, por ejemplo, una tabla, al borde inferior del elemento_1, por ejemplo, la misma tabla, es decir, el elemento_1 está por encima del elemento_2. Como resultado, es necesario que cuando el tamaño del gráfico cambie, el borde inferior del elemento_1 se desplace y el borde superior del elemento_2 se desplace después. La librería dispone de los métodos AutoYResizeMode y AutoYResizeBottomOffset, pero no consigo averiguar cómo implementar el desplazamiento de los bordes superiores.
 
Konstantin:
No consigo averiguar cómo vincular el elemento_2, por ejemplo, una tabla, al borde inferior del elemento_1, por ejemplo, la misma tabla, es decir, el elemento_1 está por encima del elemento_2. Como resultado, es necesario que cuando el tamaño del gráfico cambie, el borde inferior del elemento_1 se desplace y el borde superior del elemento_2 se desplace después. Existen métodos AutoYResizeMode y AutoYResizeBottomOffset en la librería, pero no consigo averiguar cómo implementar el desplazamiento de los límites superiores.

También hay métodos para unir elementos:

   //--- Modo (get/set) de vincular un elemento a (1) la derecha y (2) el borde inferior de la ventana
   bool              AnchorRightWindowSide(void)               const { return(m_anchor_right_window_side);   }
   void              AnchorRightWindowSide(const bool flag)          { m_anchor_right_window_side=flag;      }
   bool              AnchorBottomWindowSide(void)              const { return(m_anchor_bottom_window_side);  }
   void              AnchorBottomWindowSide(const bool flag)         { m_anchor_bottom_window_side=flag;     }

//---

Trate de resolver el problema en combinación con estas propiedades.