Discusión sobre el artículo "Interfaces gráficas XI: Integración de la librería gráfica estándar (build 16)"
¡Gran biblioteca!
¡Enhorabuena de nuevo! ¡Buen trabajo!
Buenas tardes.
El problema apareció de donde no me lo esperaba...
Había un programa - una ventana principal, una ventana de diálogo. Todo iba bien. Añadí otra ventana de diálogo.
Ahora así es como se comportan. Abrimos una ventana de diálogo - todo está bien, funciona. La cerramos. Abrimos la segunda, los elementos en ella no reaccionan a los clics, o más bien reaccionan de forma extraña (en la captura de pantalla). Hasta que haces clic en el título de la ventana, entonces todo es normal con esta ventana. Pero el mismo problema ahora con la primera ventana, hasta que se hace clic en el título.
¿Podría decirme qué puede estar mal? ¿O dónde mirar?
He descargado el paquete, y crear una GUI de demostración de CTable.
#include <\\EasyAndFastGUI\\WndEvents.mqh> //+------------------------------------------------------------------+ //| Clase para crear una aplicación| //+------------------------------------------------------------------+ class CGUI : public CWndEvents { private: CWindow m_window; CTable m_table; public: bool CreateGUI(const int x, const int y, const string caption_text); private: bool CreateWindow(const int x, const int y, const int x_size, const int y_size, const string text); bool CreateTable(const int x_gap, const int y_gap); }; bool CGUI::CreateGUI(const int x, const int y, const string caption_text) { int x_size = 400, y_size = 400; if (!CreateWindow(x, y, x_size, y_size, caption_text)) { return(false); } if (!CreateTable(1, 20)) { return(false); } m_chart.Redraw(); return(true); } //+------------------------------------------------------------------+ //| Crea el formulario 1 para los controles| //+------------------------------------------------------------------+ bool CGUI::CreateWindow(const int x, const int y, const int x_size, const int y_size, const string caption_text) { CWndContainer::AddWindow(m_window); m_window.XSize(x_size); m_window.YSize(y_size); m_window.Alpha(255); m_window.IsMovable(true); m_window.ResizeMode(true); m_window.CloseButtonIsUsed(true); m_window.FullscreenButtonIsUsed(true); m_window.CollapseButtonIsUsed(true); m_window.TooltipsButtonIsUsed(true); m_window.RollUpSubwindowMode(true, true); m_window.TransparentOnlyCaption(true); //--- Establecer la información sobre herramientas m_window.GetCloseButtonPointer().Tooltip("Close"); m_window.GetFullscreenButtonPointer().Tooltip("Fullscreen/Minimize"); m_window.GetCollapseButtonPointer().Tooltip("Collapse/Expand"); m_window.GetTooltipButtonPointer().Tooltip("Tooltips"); m_window.BackColor((color)ChartGetInteger(m_chart_id, CHART_COLOR_BACKGROUND)); m_window.BorderColor(clrMaroon); return(m_window.CreateWindow(m_chart_id, m_subwin, caption_text, x, y)); } //+------------------------------------------------------------------+ //| Crear una tabla renderizada| //+------------------------------------------------------------------+ bool CGUI::CreateTable(const int x_gap,const int y_gap) { m_table.MainPointer(m_window); int x_size = 300, y_size = 300; int column_width[] = {100, 200}; m_table.XSize(x_size); m_table.YSize(y_size); m_table.TableSize(2, 10); m_table.ColumnsWidth(column_width); m_table.CellYSize(30); ENUM_ALIGN_MODE column_align[]; ArrayResize(column_align, 2); ::ArrayInitialize(column_align, ALIGN_RIGHT); m_table.TextAlign(column_align); color bg_color = (color)ChartGetInteger(m_chart_id, CHART_COLOR_BACKGROUND); m_table.CellColor(bg_color); m_table.GridColor(bg_color); m_table.BorderColor(bg_color); m_table.FontSize(12); /* CScrollV *scroll_v = m_table.GetScrollVPointer(); scroll_v.ChangeThumbSize(0, 0); scroll_v.Hide(); scroll_v.IsVisible(false); CScrollH *scroll_h = m_table.GetScrollHPointer(); scroll_h.ChangeThumbSize(0, 0); scroll_h.Hide(); scroll_h.IsVisible(false); //*/ //m_table.TextXOffset(5); //m_table.TextYOffset(4); m_table.ShowHeaders(false); m_table.SelectableRow(false); m_table.ColumnResizeMode(false); //m_table.IsZebraFormatRows(clrWhiteSmoke); //m_table.AutoXResizeMode(true); //m_table.AutoXResizeRightOffset(1); //m_table.AutoYResizeMode(true); //m_table.AutoYResizeBottomOffset(25); if (!m_table.CreateTable(x_gap, y_gap)) { return(false); } CWndContainer::AddToElementsArray(0, m_table); m_table.Update(true); m_window.Update(true); return(true); } //+------------------------------------------------------------------+ //| Función de inicialización experta| //+------------------------------------------------------------------+ int OnInit() { //--- CGUI gui; gui.CreateGUI(10, 50, "Test GUI"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Función de desinicialización experta| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Función tick experto| //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+
Pero encontré que el control CTable siempre deja espacios en la barra de desplazamiento H/V, y no pude eliminarlos con Hide(), IsVisiable(false).
Así que, ¿podría darme una solución?
Gracias de antemano,
David
Tal vez esta pregunta ya se ha discutido, pero no la he visto. ¿Cómo hacer que el panel se redibuje después de añadir nuevos objetos al gráfico (por ejemplo, líneas)?
Me he dado cuenta de que si minimizo el panel, ya está encima de estas líneas, pero no de todas :(((
Tal vez esta pregunta ya se ha discutido, pero no la he visto. ¿Cómo hacer que el panel se redibuje después de añadir nuevos objetos al gráfico (por ejemplo, líneas)?
- Descarga la última versión de la librería.
- Intenta llamar al método CWndEvents::ResetWindow().
P.D. La librería no se actualizará más. Todos los cambios necesarios, correcciones y adiciones, si tal necesidad surge, los usuarios deben aprender a hacer por su cuenta.
- Descarga la última versión de la librería.
- Pruebe a llamar al método CWndEvents::ResetWindow().
P.D. La librería no se actualizará más. Todos los cambios necesarios, correcciones y adiciones, si tal necesidad surge, los usuarios deben aprender a hacer por su cuenta.
Entendido, gracias
Lamentablemente, las distintas compilaciones (releases) no encajan entre sí.
Es decir: todos los ejemplos desde Artículo01 hasta Artículo11 deberían funcionar realmente sin errores.
Sin embargo, el compilador lanza un montón de advertencias y errores en los ejemplos anteriores.
Al "copiar" las nuevas versiones, los ejemplos anteriores dejan de funcionar.
Además, las traducciones son inadecuadas o inexistentes.
¡Genial!
Es una pena y típico de tantas cosas en Metaquotes.
Ya sería hora de poner en línea una versión totalmente funcional y completa y no sólo trozos incompatibles.
Una tabla de contenidos de los archivos de muestra y dónde encontrar lo que falta. Este sería un tema para el último artículo de esta serie, ya que se rumorea que no continuará.
Sería una verdadera lástima desperdiciar todo ese trabajo si no hubiera ejemplos funcionales que utilizar.
Saludos cordiales, Otto Pauser
¡Y lo que realmente falta es un editor de diálogos!
Voy a intentar

- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Interfaces gráficas XI: Integración de la librería gráfica estándar (build 16):
Autor: Anatoli Kazharski