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

 
¿Está previsto un diseñador visual de formularios?
 
Anatoli Kazharski

Hola ... ¿hay una manera de abrir la ventana de diálogo utilizando esta versión de la biblioteca. La ventana de diálogo sólo funciona con el selector de color, y si trato de crear una vacía para insertar alguna tabla o botones adicionales, entonces no funciona en absoluto, sólo está encendida y no es móvil.

Por favor ayuda ..esta es una libreria absolutamente hermosa, y muchas gracias por compartirla pero este detalle esta reduciendo mucho la funcionalidad

si usamos una sola ventana todo esta bien solo que la ventana de dialogo no funciona correctamente, o esto era un plan desde el principio ??:)


PS

En caso de que me equivoque ¿hay algún ejemplo de cómo abrir una ventana de diálogo y tener un solo botón dentro o algo más (sólo que no selector de color)?

Estoy usando MT5

 
Farrukh Aleem:

En la versión MT4 SimpleButton carece de la función para cambiar el texto del botón / título .


SimpleButton.mqh

Añadir la segunda línea con el fin de obtener esa funcionalidad. Publicado aquí la esperanza ayuda a alguien que necesita.

la biblioteca de este artículo es sólo para MT5 y si alguien le gustaría cambiar el texto :

lableClassDeclarationName.LabelText(textValue);
lableClassDeclarationName.Update(true);
 
Stanislav Korotky:
¿Hay algún plan para un diseñador visual de formularios?

Anteriormente se pensó en ello, pero desgraciadamente aún no hay tiempo para ello.

Pronto saldrá una nueva versión de la librería. Será mucho más fácil y rápido crear GUI. Después de eso podemos tratar de crear un editor visual.

 
Marcin Rutkowski:

Hola ... ¿hay una manera de abrir la ventana de diálogo utilizando esta versión de la biblioteca. Ventana de diálogo está trabajando sólo con selector de color , y si trato de crear uno sólo vacío para insertar alguna tabla o botones adicionales a continuación, no está funcionando en absoluto, sólo está encendido y no es móvil .

Por favor, ayuda ... esta es una biblioteca absolutamente hermosa, y muchas gracias por compartir, pero este detalle está reduciendo mucho la funcionalidad.

si usamos una sola ventana todo esta bien solo la ventana de dialogo no funciona correctamente, o este era un plan desde el principio ??:)


PS

En caso de que me equivoque ¿hay algún ejemplo de cómo abrir una ventana de diálogo y tener un solo botón dentro o algo más (sólo que no selector de color)?

Estoy usando MT5

Hola Marcin, escriba su función para crear objetos (ventanas de diálogo incluido). Por ejemplo:

Primero, declara las ventanas de dialogo y otros controles(botones, cajas de texto, checkboxes y lo que sea) en el Program.mqh:

class CProgram : public CWndEvents
  {
protected:
  
   
   CWindow           m_window;//ventana principal
   CWindow           s_window;//subventana de diálogo
  
   CButton           m_ibut1;
   CButton           m_ibut2;
   CTextBox          t_box1;
   CCheckBox         m_checkb1;
....

En el MainWindow.mqh:

   //---función ventana principal:
 bool CProgram::CreateWindow(const string caption_text)
  {
//--- Añade el puntero de la ventana al array de ventanas
   CWndContainer::AddWindow(m_window);
//--- Coordenadas
   int x=(m_window.X()>0) ? m_window.X() : 20;
   int y=(m_window.Y()>0) ? m_window.Y() : 30;
//--- Propiedades
   m_window.XSize(253);
   m_window.YSize(350);
   m_window.IsMovable(true);
   m_window.Alpha(200);
   m_window.IconXGap(3);
   m_window.IconYGap(2);
   m_window.WindowType(W_MAIN);
   m_window.CloseButtonIsUsed(true);
   m_window.CollapseButtonIsUsed(true);
   m_window.TooltipsButtonIsUsed(false);
//--- Establecer la información sobre herramientas
   m_window.GetCloseButtonPointer().Tooltip("Close");
   m_window.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
  // m_window.GetTooltipButtonPointer().Tooltip("Tooltips");
//--- Crear un formulario
   if(!m_window.CreateWindow(m_chart_id,m_subwin,caption_text,x,y))
      return(false);
//---
   return(true);
  }
 //----para diálogo(subventana): 
bool CProgram::CreateSubWindow(CWindow &win,const int xSize,const int ySize,const string caption_text)
  {
//--- Añade el puntero de la ventana al array de ventanas
   CWndContainer::AddWindow(win);
//--- Coordenadas
   int x=(win.X()>0) ? win.X() : 150;
   int y=(win.Y()>0) ? win.Y() : 70;
//--- Propiedades
   win.XSize(xSize);//350
   win.YSize(ySize);//170
   win.IsMovable(true);
   win.Alpha(200);
   win.IconXGap(3);
   win.IconYGap(2);
   win.WindowType(W_DIALOG);
   win.CloseButtonIsUsed(true);
   win.CollapseButtonIsUsed(true);
   win.TooltipsButtonIsUsed(false);
 
 // m_window.IconFile("\\Images\EasyAndFastGUI\Icons\bmp16\advisor.bmp");
//--- Establecer la información sobre herramientas
   win.GetCloseButtonPointer().Tooltip("Close");
   win.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
  // m_window.GetTooltipButtonPointer().Tooltip("Tooltips");
//--- Crear un formulario
   if(!win.CreateWindow(m_chart_id,m_subwin,caption_text,x,y))
      return(false);
//---
   return(true);
  }  
Para otros controles(botones,textboxes..) usa el mainpoiner(ventana o pestaña) y el indice de la misma("windex" en mi caso) desde el principio:
bool CProgram::CreateTextBox(CTextBox &t_box,CWindow &win,const int windex,const int x_gap,const int y_gap,const int Xsize,const int Ysize,
                                          string text,const uint line_index,const int fontSize,const bool mlinemode)
  {
       t_box.MainPointer(win);
 
//--- Propiedades
   t_box.XSize(Xsize);
   t_box.YSize(Ysize);
   t_box.FontSize(fontSize);
   t_box.Font("Calibri"); // Consolas|Calibri|Tahoma
   t_box.TextYOffset(2);
   t_box.TextXOffset(2);
   t_box.BackColor(clrWhite);
   t_box.BorderColor(C'150,170,180');
   t_box.LabelColor(clrBlack);
   t_box.WordWrapMode(true);
   t_box.ReadOnlyMode(false);
   t_box.IsCenterText(true);
   t_box.MultiLineMode(mlinemode);
   t_box.AutoYResizeBottomOffset(3);
   t_box.AutoXResizeRightOffset(3);
   t_box.AddText(line_index,text);
   t_box.IsVisible(true);
//--- Adjuntar a la ficha
  // tab.AddToElementsArray(tindex,t_box);
//--- Crear un control
   if(!t_box.CreateTextBox(x_gap,y_gap))
      return(false);
//--- Añade el objeto al array común de grupos de objetos
   CWndContainer::AddToElementsArray(windex,t_box);
  return(true);
  } 
//----------win botón--------
bool CProgram::CreateIconButton(CButton &i_but,CWindow &win,const int windex,const int x_gap,const int y_gap,const int Xsize,const int Ysize,
                                              string text, bool twostate,color bckclr)
  {
//--- Almacenar el puntero al control principal
   i_but.MainPointer(win);
//--- Propiedades
   i_but.XSize(Xsize);
   i_but.YSize(Ysize);
   i_but.IconXGap(3);
   i_but.IconYGap(3);
   i_but.TwoState(twostate);
   i_but.BackColor(bckclr);
   i_but.BorderColor(clrBlack);
   i_but.IsCenterText(true);
   i_but.IsPressed(false);
   if(i_but.TwoState()==true)
     {i_but.BackColorPressed(bckclr);
     i_but.BackColor(clrSilver);}
   else
     i_but.BackColor(bckclr);
//--- Adjuntar a la ficha
  // tab.AddToElementsArray(tindex,i_but);

//--- Crear un control
   if(!i_but.CreateButton(text,x_gap,y_gap))
      return(false);
//--- Añade el puntero al control a la base
   CWndContainer::AddToElementsArray(windex,i_but);
   return(true);
  } 
//-----------tab button--------------
bool CProgram::CreatetabIconButton(CButton &i_but,CTabs &tab,const int tindex,const int x_gap,const int y_gap,const int Xsize,const int Ysize,
                                              string text, bool twostate,color bckclr)
  {
//--- Almacenar el puntero al control principal
   i_but.MainPointer(tab);
//--- Propiedades
   i_but.XSize(Xsize);
   i_but.YSize(Ysize);
   i_but.IconXGap(3);
   i_but.IconYGap(3);
   i_but.TwoState(twostate);
   i_but.BackColor(bckclr);
   i_but.BorderColor(clrBlack);
   i_but.IsCenterText(true);
   i_but.IsPressed(false);
   if(i_but.TwoState()==true)
     {i_but.BackColorPressed(bckclr);
     i_but.BackColor(clrSilver);}
   else
     i_but.BackColor(bckclr);
//--- Adjuntar a la ficha
   tab.AddToElementsArray(tindex,i_but);

//--- Crear un control
   if(!i_but.CreateButton(text,x_gap,y_gap))
      return(false);
//--- Añade el puntero al control a la base
   CWndContainer::AddToElementsArray(0,i_but);
   return(true);
  }
 //----casillas de verificación----------
bool CProgram::CreateCheckBox(CCheckBox &check,CWindow &win,const int windex,const int x_gap,const int y_gap,const int Xsize,const int Ysize,string text)
  {
//--- Almacenar el puntero al control principal
   check.MainPointer(win);
//--- Establecer propiedades antes de la creación
   check.XSize(Xsize);
   check.YSize(Ysize);
   check.IsPressed(false);


//--- Crear un control
   if(!check.CreateCheckBox(text,x_gap,y_gap))
      return(false);
//--- Añade el objeto al array común de grupos de objetos
    CWndContainer::AddToElementsArray(windex,check);
   return(true);
  }      

Ahora vuelve a Program.mqh: Crea los controles

bool CProgram::CreateGUI()
  {

if(!CreateWindow("EA Panel"))
      return(false);
if(!CreateSubWindow(s_window,280,200,"SubWindow"))
  return(false);
if(!CreatetabIconButton(m_ibut1,m_tabs1,2,80,125,80,15,"Button 1",false,clrSilver))
        return(false);   
   if(!CreateIconButton(m_ibut2,s_window,3,70,150,60,20,"Button 2",false,clrSilver))
            return(false);       
   if(!CreateTextBox(t_box1,s_window,3,100,70,30,20," ",0,10,false))
      return(false);
   if(!CreateCheckBox(m_checkb1,s_window,3,20,70,70,20,"CheckBox1"))
      return(false); 
…...
….

CwndEvents::CompletedGUI();
return(true);
} 

Como puedes ver, usé pestañas en mi panel principal así que escribo otra función para el botón. Luego en la función OnEvent:

void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_BUTTON)
       {
       if(lparam==m_ibut1.Id())
         {
         s_window.OpenWindow();
         }
       }
   ....
....
  }

Compilar y cargar el EA. Mi EA usando la librería EasyAndFastGUI se ve así:

 

Buenas tardes, compilada la build 15 de la libreria bajo mt4, creado un panel con tablas, pero las tablas parpadean periodicamente, bajo mt5 tambien he notado esto. Si no paso un parámetro al método, el parpadeo desaparece, pero los datos de la tabla no cambia. código de prueba adjunto en el archivo.

   if(m_counter2.CheckTimeCounter())
     {
      SetValuesToTradeTable();
      UpdateTradeTable(true);

      //--- Obtener los símbolos de las posiciones abiertas
      string symbols_name[];
      int symbols_total=GetPositionsSymbols(symbols_name);
      //--- Actualizar valores en la tabla
      SetValuesToPositionsTable(symbols_name);
      //--- Ordenar si esto ya ha sido hecho por el usuario antes de la actualización
      //m_table_positions.SortData((uint)m_table_positions.IsSortedColumnIndex(),m_table_positions.IsSortDirection());
      //--- Actualizar tabla
      UpdatePositionsTable(true);
     }
Archivos adjuntos:
 
zlory73:

Hola Marcin, escribe tu función para crear objetos (ventanas de diálogo incluidas). Por ejemplo:

Primero, declara las ventanas de dialogo y otros controles(botones, cajas de texto,checkboxes y lo que sea) en el Program.mqh:

En el MainWindow.mqh:

..gracias por la respuesta ..solo para confirmar de que articulo descargaste la libreria ..mi progreso es de 1 paso adelante, pero todos los objetos vinculados con la ventana de dialogo no son arrastrables y no desaparecen correctamente ... Si usted podría enviarme también enlace al artículo o simplemente confirmar si el enlace de abajo es correcta :) .. ¿De dónde descargar su biblioteca

https://www.mql5.com/es/code/19703


Voy a seguir tratando de tener que trabajar :) tengo que no ver algún pequeño error en mi código :) ... gracias de nuevo

EasyAndFastGUI library for creating graphical interfaces
EasyAndFastGUI library for creating graphical interfaces
  • www.mql5.com
The EasyAndFastGUI library allows creating graphical interfaces for custom MQL programs.
 

He solucionado el parpadeo de la tabla, o más bien el problema desaparecía al escribir datos en una celda con el parámetro true

m_table_positions.SetValue(0,r,symbols_name[r],0,true);

y llamando al método de actualización de la tabla sin el parámetro

m_table_positions.Update();
 
Marcin Rutkowski:

wow .. gracias por la respuesta .. sólo para confirmar de qué artículo se descarga la biblioteca ... mi progreso es de 1 paso adelante, pero todos los objetos vinculados con el cuadro de diálogo no son arrastrables y no desaparece correctamente ...... Si usted podría enviarme también el enlace al artículo o simplemente confirmar si el enlace de abajo es correcto :) ... ¿De dónde descargar su biblioteca?

https://www.mql5.com/es/code/19703


Voy a seguir intentando que funcione :) tengo que no ver algún pequeño error en mi código :) ...gracias de nuevo

Hola Marcin, he descargado el EasyAndFastGUI Build 16 de https://www.mql5.com/es/articles/3527 luego sustituido actualizaciones: Table.mqh en MQL5\Include\EasyAndFastGUI\Controls\ y Keys.mqh

en MQL5IncludeEasyAndFastGUI del artículo: https: //www.mql5.com/en/articles/4715.

Graphical Interfaces XI: Integrating the Standard Graphics Library (build 16)
Graphical Interfaces XI: Integrating the Standard Graphics Library (build 16)
  • 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. Files must be placed under the same...
 

Recompilado la biblioteca, pero dice que la clase no se encuentra

la clase 'CWindow' no está definida Element.mqh