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íneacolor 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 interfazif(windows_total<1)
return;
//--- Redimensiona todos los elementos del formulario bloqueado si uno de los modos está activadoif(m_windows[0].IsLocked() && (m_windows[0].AutoXResizeMode() || m_windows[0].AutoXResizeMode()))
{
Sería genial utilizar esta biblioteca, pero necesito resolver estos problemas primero.
Static Members of a Class - Object-Oriented Programming - Language Basics - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
¿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:
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.
¿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).
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 ceroif(windows_total<1)
{
m_counter_element_id=0;
::Comment("Loading. Please wait...");
}
//--- Añadir un puntero a la matriz de ventanasint 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 elementosint 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
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
¡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::"?
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?
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()"?
Sería genial utilizar esta biblioteca, pero necesito resolver estos problemas primero.
¡Gracias de antemano!
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, ¡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!
¿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 )
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:
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