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

 

Artículo publicado Interfaces gráficas XI: Integración de la librería gráfica estándar (build 16):

Desde hace poco tiempo, fue presentada la nueva versión de la librería gráfica para el diseño de los gráficos científicos (clase CGraphic). En esta actualización de la librería para la creación de las interfaces gráficas será presentada la versión con nuevo control para crear los gráficos. Ahora, será aún más fácil visualizar los datos de diferentes tipos.

Autor: Anatoli Kazharski

 
Gran artículo.
 

¡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?

Archivos adjuntos:
123123123.gif  504 kb
 

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 :(((



 
traderEvgen:

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.

 
Anatoli Kazharski:

  • 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