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

 

¡Hola compañeros!

He conseguido reducir el número de warrnings de 18 a 6 sustituyendo el nombre del objeto por "CElementBase::".

Y esos 6 se reducen a 4 tipos de errores, que doy a continuación. Por favor, ayúdenme a cercarlos correctamente.

1. ¿Cómo reemplazar correctamente "m_tabs.GetButtonPointer(m_selected_tab)." con el texto "CElementBase::"?

//--- Definir el color de la línea
   color clr=m_back_color;
   if(m_tabs.GetButtonPointer(m_selected_tab).IsLocked()) // ¡ésta!
      clr=m_tabs.GetButtonPointer(m_selected_tab).BackColorLocked();
//--- Dibuja una línea
   m_canvas.Line(x1,y1,x2,y2,::ColorToARGB(clr,m_alpha));
  }


2. Y aquí - cuando reemplazo "el." con "CElementBase::". - hay un nuevo error de compilación "IsAvailable - access to non-staticmember of function" - ¿cómo arreglar este varning correctamente?

      for(int e=0; e<elements_total; e++)
        {
         //--- Compruebe sólo los elementos disponibles
         CElement *el=m_wnd[m_active_window_index].m_elements[e];
         if(!el.IsVisible() || !el.IsAvailable() || el.IsLocked())
            continue;
         //--- Manejo de eventos en el item handler
         el.OnEvent(m_id,m_lparam,m_dparam,m_sparam);
        }


3. la misma linea: cuando reemplazo "el.IsLocked()" con el texto "CElementBase::IsLocked" : error "IsLocked - access to non-static member of function".

4. y por último - ¿cuál es la forma correcta de sustituir "m_windows[0].IsLocked()"?

//--- Salir si no se crea la interfaz
   if(windows_total<1)
      return;
//--- Redimensiona todos los elementos del formulario bloqueado si uno de los modos está activado
   if(m_windows[0].IsLocked() && (m_windows[0].AutoXResizeMode() || m_windows[0].AutoXResizeMode()))
     {

Sería genial utilizar esta biblioteca, pero necesito resolver estos problemas primero.


¡Gracias de antemano!

Documentation on MQL5: Language Basics / Object-Oriented Programming / Static Members of a Class
Documentation on MQL5: Language Basics / Object-Oriented Programming / Static Members of a Class
  • www.mql5.com
Static Members of a Class - Object-Oriented Programming - Language Basics - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 
Yevgen Drumachyk:

Hola, colegas.

He podido reducir el número de warrnings de 18 a 6 sustituyendo el nombre del objeto por "CElementBase::".

el.CElementBase::IsLocked() ?
 
Edgar Akhmadeev:
el.CElementBase::IsLocked() ?

Edgar Akhmadeev, ¡muchas gracias, colega!

¡Funcionó! ))

 

¡Saludos, compañeros!

¿Pueden decirme cómo crear dos ventanas utilizando esta biblioteca? Estoy escribiendo un Asesor Experto que consta de dos ventanas: 1) panel de negociación, y 2) Lista de Vigilancia.

La primera ventana con el panel de trading está creada y funciona sin problemas:

CWindow m_window;

CreateWindow(m_window, "META TOOLS",1,1,175,175,200,false,false,true,true) + añadiendo botones:


Pero al añadir:

CWindow m_watchlist_window;

CreateWindow(m_watchlist_window, "Watch List",150,1,100,150,150,false,false,true,true,false)

CreateButton(m_watchlist1_btn, "EURUSD",m_watchlist_window,0,245,25,60,30)

entonces el botón EURUSD aparece en el aire... es decir, no se crea otra ventana separada... ¿por qué?



Esta UI se crea en el contexto: class CProgram : public CWndCreate

Completo la creación de la UI con el comando

CWndEvents::CompletedGUI()


¿Podrías decirme si has conseguido crear una UI multiventana?

Me refiero a dos ventanas independientes. Es decir, la variante con ventana de diálogo que aparece (como para la configuración) no es adecuada. Necesitas que ambas ventanas estén siempre visibles y que se pueda hacer clic en ellas de forma independiente. ¿Por qué ventanas independientes? Porque la primera - Panel de Operaciones - tiene un tamaño fijo. La segunda - Lista de Vigilancia - el tamaño de la ventana cambia a medida que se añade o reduce el número de elementos añadidos a la misma.

 

¡Hola chicos!

¿Habéis podido crear más de 1 ventana independiente utilizando esta librería? ¿Es decir, llamar al método WindowCreate() más de una vez para crear ventanas adicionales en el gráfico dentro del mismo EA?

Puedo crear con éxito 1 ventana. Pero cuando intento crear la segunda - NO aparece...

¿Alguna idea de por qué?

O, un ejemplo, ¿cómo se las arregló para crear ventanas adicionales (no diálogos).

¡Gracias!

 
Yevgen Drumachyk:

¿Podría decirme cómo crear dos ventanas utilizando esta biblioteca?


No es posible. Todo está construido alrededor de una ventana principal. Una de las razones por las que empecé a escribir mi propia biblioteca )

 
Oleksii Chepurnyi:

De ninguna manera. Todo está construido alrededor de una ventana principal. Una de las razones por las que empecé a escribir mi propia biblioteca )

¡Gracias, Oleksii Chepurnyi! Después de todo, me gustaría prescindir de esta biblioteca. Está muy bien hecha.


Chicos, ¿alguna otra versión? ¿Quizás alguien evitó este problema y pudo crear más de 1 ventana?

Puedes ver en el código de la librería que una ventana recién creada se añade al "array común de elementos". ¿Así que puede haber más de una ventana? Presta atención a este trozo de código en la librería:



//+------------------------------------------------------------------+
//| Añade un puntero de ventana a la base de datos de elementos de interfaz ||
//+------------------------------------------------------------------+
void CWndContainer::AddWindow(CWindow &object)
  {
   int windows_total=::ArraySize(m_windows);
//--- Si aún no hay ventanas, reinicia el contador de elementos a cero
   if(windows_total<1)
     {
      m_counter_element_id=0;
      ::Comment("Loading. Please wait...");
     }
//--- Añadir un puntero a la matriz de ventanas
   int new_size=windows_total+1;
   ::ArrayResize(m_wnd,new_size);
   ::ArrayResize(m_windows,new_size);
   m_windows[windows_total]=::GetPointer(object);
//--- Añadir un puntero a la matriz común de elementos
   int last_index=ResizeArray(m_wnd[windows_total].m_elements);
   m_wnd[windows_total].m_elements[last_index]=::GetPointer(object);
//--- Añadir punteros de botones de ventana a la base de datos
   AddWindowElements(windows_total,object);
//--- Establece el id y recuerda el id del último elemento
   m_windows[windows_total].Id(m_counter_element_id);
   m_windows[windows_total].LastId(m_counter_element_id);
//--- Aumentar el contador de identificadores de elementos
   m_counter_element_id++;
  }
 
Para iniciar dos ventanas y hacer que estén activas al mismo tiempo, hay que editar la biblioteca. No es una tarea sencilla y voluminosa. Si lo necesitas mucho, escribe a freelance
 
El mejor. Felicidades.
 

Hola a todos, ¿hay algún límite para CreateSimpleButton? No soy capaz de poner más de 6 botones simples en la ventana. Estoy utilizando el código de las interfaces gráficas x (mql4). Tenía la razón uninit 8. Estoy muy agradecido a Anatoli Kazharski Best, RDT


Descubrí que el error era con el propio metatrader 4, estaba compilando el EA en el mismo gráfico varias veces. He comprobado que si hago los cambios y cierro el gráfico y abro uno nuevo y luego pongo el EA en él, los cambios se aplican correctamente. Anatoli, muchas gracias por todo el trabajo excepcional y completo. Un saludo, RDT

Anatoli Kazharski
Anatoli Kazharski
  • 2019.02.17
  • www.mql5.com
Perfil do Trader