//--- Columnas for(uint c=l; c<m_visible_columns_total; c++) { //--- Obtener la posición actual del deslizador de la barra de desplazamiento vertical v=m_scrollv.CurrentPos()+t; //--- Filas for(uint r=t; r<m_visible_rows_total; r++) { //--- Datos de la tabla de desplazamiento if(v>=t && v<m_rows_total && h>=l && h<m_columns_total) { //--- Ajuste de la línea resaltada colorback_color=(m_selected_item==v) ? m_selected_row_color : m_vcolumns[h].m_cell_color[v]; colortext_color=(m_selected_item==v) ? m_selected_row_text_color : m_vcolumns[h].m_text_color[v]; //--- Ajuste (1) los valores, (2) el color de fondo, (3) el color del texto y (4) la alineación del texto en las celdas SetCellParameters(c,r,m_vcolumns[h].m_vrows[v],back_color,text_color,m_vcolumns[h].m_text_align[v]); v++; } } //--- h++; }
¡Sobre la base de esta biblioteca de Anatoli Kazharski , tratando de soldar un búho y quería organizar un registro en el archivo de los estados de las casillas de verificación y los valores de los campos de entrada! ¡Pero para no registrar cada vez TODOS los valores, no puedo entender cómo determinar el elemento que se hizo clic! ¡En la aplicación de usuario hay un controlador de eventos, y el parámetro lparam es sólo responsable del índice del elemento, pero la forma de encontrar el elemento por este índice que luego trabajar con él no puedo entender!
¡Sobre la base de esta biblioteca de Anatoli Kazharski , estoy tratando de soldar un búho y quería organizar un registro en el archivo de los estados de las casillas de verificación y los valores de los campos de entrada! ¡Pero para no registrar cada vez TODOS los valores, no puedo entender cómo determinar el elemento que se hizo clic! ¡En la aplicación de usuario hay un controlador de eventos, y el parámetro lparam es sólo responsable del índice del elemento, pero la forma de encontrar el elemento por este índice que luego trabajar con él no puedo entender!
¡Gracias de antemano!
Al hacer clic en las casillas de verificación puede ser rastreado por el evento con el identificador ON_CLICK_LABEL.
En lparam viene el valor del identificador del elemento.
Ejemplo:
//+------------------------------------------------------------------+ //| Manejador de eventos| //+------------------------------------------------------------------+ void CProgram::OnEvent(constint id,constlong &lparam,constdouble &dparam,conststring &sparam) { //--- Evento click en la etiqueta de texto if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL) { //--- Si ha hecho clic en la primera casilla de verificación if(lparam==m_checkbox1.Id()) { //--- } } }
//--- Si ha hecho clic en la primera casilla de verificación
if(lparam==m_checkbox1.Id())
¡Contestado ya después de dejar este post! ¡Gracias! Y tengo que pasar por todas las casillas de verificación y campos de entrada? Y como ejemplo si hay un "montón" de ellos? No array que almacena todos los índices de los elementos? ¡Entonces por este índice para obtener los valores necesarios (por ejemplo, hecho clic o no hecho clic en la casilla de verificación, el valor en el campo de entrada)!
¿Cuál es un ejemplo si hay un "montón" de ellos? No hay una matriz que almacena todos los índices de los elementos? ¡Entonces por este índice para obtener los valores necesarios (por ejemplo, casilla de verificación clicada o no clicada, valor en el campo de entrada)!
Mira el contenido de la clase CWndContainer. Todos están almacenados allí en la estructura WindowElements. Se puede acceder a ellos desde la clase de usuario.
//--- Estructura de matrices de elementos struct WindowElements { //--- Matriz total de todos los objetos CChartObject *m_objects[]; //--- Matriz total de todos los elementos CElementBase *m_elements[];
//--- Arreglos personales de elementos: // Matriz de menús contextuales CContextMenu *m_context_menus[]; //--- Matriz de menús principales CMenuBar *m_menu_bars[]; //--- Información sobre herramientas CTooltip *m_tooltips[]; //--- Matriz de listas desplegables de diferentes tipos CElementBase *m_drop_lists[]; //--- Matriz de barras de desplazamiento CElementBase *m_scrolls[]; //--- Matriz de tablas de etiquetas de texto CElementBase *m_labels_tables[]; //--- Matriz de tablas de campos de entrada CElementBase *m_tables[]; //--- Matriz de tablas dibujadas CElementBase *m_canvas_tables[]; //--- Matriz de pestañas CTabs *m_tabs[]; //--- Array de pestañas con imágenes CIconTabs *m_icon_tabs[]; //--- Matriz de calendarios CCalendar *m_calendars[]; //--- Matriz de calendarios desplegables CDropCalendar *m_drop_calendars[]; //--- Listas de árboles CTreeView *m_treeview_lists[]; //--- Navegadores de archivos CFileNavigator *m_file_navigators[]; //--- Gráficos estándar (objetos gráficos) CStandardChart *m_sub_charts[]; //--- Deslizadores de imágenes CPicturesSlider *m_pictures_slider[]; //--- Tiempo CTimeEdit *m_time_edits[]; //--- Campos multilínea CTextBox *m_text_boxes[]; }; //--- Matriz de matrices de elementos para cada ventana WindowElements m_wnd[];
¡De nuevo me he encontrado con implementaciones de manejadores de eventos que no entiendo! Cuando se crea una aplicación personalizada, se supone que para conectar la interfaz gráfica de usuario a través de una clase:
//--- Conexión de la clase de panel comercial #include "Menu.mqh" CProgram program;
pero entonces, ¿cómo atrapar las pulsaciones de botones, cómo obtener los estados de las casillas de verificación y los valores de los campos de entrada, si están en la zona privada de la clase CProgram? ¿Debo mover lo que necesito a público o no entiendo algo?
pero luego cómo atrapar las pulsaciones de botones, cómo obtener los estados de las casillas de verificación y los valores de los campos de entrada, ...
En el manejador CProgram.
//+------------------------------------------------------------------+ //| Manejador de eventos| //+------------------------------------------------------------------+ void CProgram::OnEvent(constint id,constlong &lparam,constdouble &dparam,conststring &sparam) { //--- Evento click en la etiqueta de texto if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL) {
}
}
//---
Todos los artículos tienen archivos de ejemplo de aplicaciones MQL que muestran como manejar los eventos de los controles.
//+------------------------------------------------------------------+ //| Manejador de eventos| //+------------------------------------------------------------------+ void CProgram::OnEvent(constint id,constlong &lparam,constdouble &dparam,conststring &sparam) { //--- Evento click en la etiqueta de texto if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL) {
}
}
//---
Todos los artículos tienen archivos de ejemplo de aplicaciones MQL que muestran como manejar eventos de control.
En el manejador CProgram está claro, pero este manejador es para la interfaz, ¿verdad? ¡Usted no debe meter soluciones comerciales en él! ¡Entiendo muy poco acerca de OOP, sobre todo todo mi conocimiento proviene de sus artículos, así que puedo ser estúpido! :)
Así, por ejemplo, ¿cómo implementar en el Asesor Experto la apertura de una orden, el lotness de los cuales se establece en el campo de entrada? ¡Necesito obtener el valor de este campo en el propio EA!
Bueno, Tol, gracias por la pista:
for(uint c=l; c<m_visible_columns_total; c++)
{
//--- Obtener la posición actual del deslizador de la barra de desplazamiento vertical
v=m_scrollv.CurrentPos()+t;
//--- Filas
for(uint r=t; r<m_visible_rows_total; r++)
{
//--- Datos de la tabla de desplazamiento
if(v>=t && v<m_rows_total && h>=l && h<m_columns_total)
{
//--- Ajuste de la línea resaltada
color back_color=(m_selected_item==v) ? m_selected_row_color : m_vcolumns[h].m_cell_color[v];
color text_color=(m_selected_item==v) ? m_selected_row_text_color : m_vcolumns[h].m_text_color[v];
//--- Ajuste (1) los valores, (2) el color de fondo, (3) el color del texto y (4) la alineación del texto en las celdas
SetCellParameters(c,r,m_vcolumns[h].m_vrows[v],back_color,text_color,m_vcolumns[h].m_text_align[v]);
v++;
}
}
//---
h++;
}
Foro sobre negociación, sistemas automatizados de negociación y prueba de estrategias de negociación
EasyAndFastGUI biblioteca
Viktor Glovluk, 2017.01.26 10:42 AM.
¡Estimados miembros del foro, por favor ayuda!
¡Sobre la base de esta biblioteca de Anatoli Kazharski , tratando de soldar un búho y quería organizar un registro en el archivo de los estados de las casillas de verificación y los valores de los campos de entrada! ¡Pero para no registrar cada vez TODOS los valores, no puedo entender cómo determinar el elemento que se hizo clic! ¡En la aplicación de usuario hay un controlador de eventos, y el parámetro lparam es sólo responsable del índice del elemento, pero la forma de encontrar el elemento por este índice que luego trabajar con él no puedo entender!
¡Gracias de antemano!
Viktor Glovluk, 2017.01.26 10:42
¡Estimados miembros del foro, por favor ayúdenme!
¡Sobre la base de esta biblioteca de Anatoli Kazharski , estoy tratando de soldar un búho y quería organizar un registro en el archivo de los estados de las casillas de verificación y los valores de los campos de entrada! ¡Pero para no registrar cada vez TODOS los valores, no puedo entender cómo determinar el elemento que se hizo clic! ¡En la aplicación de usuario hay un controlador de eventos, y el parámetro lparam es sólo responsable del índice del elemento, pero la forma de encontrar el elemento por este índice que luego trabajar con él no puedo entender!
¡Gracias de antemano!
Al hacer clic en las casillas de verificación puede ser rastreado por el evento con el identificador ON_CLICK_LABEL.
En lparam viene el valor del identificador del elemento.
Ejemplo:
//| Manejador de eventos|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{
//--- Evento click en la etiqueta de texto
if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL)
{
//--- Si ha hecho clic en la primera casilla de verificación
if(lparam==m_checkbox1.Id())
{
//---
}
}
}
¿Es esta realmente la única manera?
//--- Si ha hecho clic en la primera casilla de verificación
if(lparam==m_checkbox1.Id())
¡Contestado ya después de dejar este post! ¡Gracias! Y tengo que pasar por todas las casillas de verificación y campos de entrada? Y como ejemplo si hay un "montón" de ellos? No array que almacena todos los índices de los elementos? ¡Entonces por este índice para obtener los valores necesarios (por ejemplo, hecho clic o no hecho clic en la casilla de verificación, el valor en el campo de entrada)!¿Es la única manera?
...
¿Cuál es un ejemplo si hay un "montón" de ellos? No hay una matriz que almacena todos los índices de los elementos? ¡Entonces por este índice para obtener los valores necesarios (por ejemplo, casilla de verificación clicada o no clicada, valor en el campo de entrada)!
Mira el contenido de la clase CWndContainer. Todos están almacenados allí en la estructura WindowElements. Se puede acceder a ellos desde la clase de usuario.
struct WindowElements
{
//--- Matriz total de todos los objetos
CChartObject *m_objects[];
//--- Matriz total de todos los elementos
CElementBase *m_elements[];
//--- Arreglos personales de elementos:
// Matriz de menús contextuales
CContextMenu *m_context_menus[];
//--- Matriz de menús principales
CMenuBar *m_menu_bars[];
//--- Información sobre herramientas
CTooltip *m_tooltips[];
//--- Matriz de listas desplegables de diferentes tipos
CElementBase *m_drop_lists[];
//--- Matriz de barras de desplazamiento
CElementBase *m_scrolls[];
//--- Matriz de tablas de etiquetas de texto
CElementBase *m_labels_tables[];
//--- Matriz de tablas de campos de entrada
CElementBase *m_tables[];
//--- Matriz de tablas dibujadas
CElementBase *m_canvas_tables[];
//--- Matriz de pestañas
CTabs *m_tabs[];
//--- Array de pestañas con imágenes
CIconTabs *m_icon_tabs[];
//--- Matriz de calendarios
CCalendar *m_calendars[];
//--- Matriz de calendarios desplegables
CDropCalendar *m_drop_calendars[];
//--- Listas de árboles
CTreeView *m_treeview_lists[];
//--- Navegadores de archivos
CFileNavigator *m_file_navigators[];
//--- Gráficos estándar (objetos gráficos)
CStandardChart *m_sub_charts[];
//--- Deslizadores de imágenes
CPicturesSlider *m_pictures_slider[];
//--- Tiempo
CTimeEdit *m_time_edits[];
//--- Campos multilínea
CTextBox *m_text_boxes[];
};
//--- Matriz de matrices de elementos para cada ventana
WindowElements m_wnd[];
Cuanto más lejos, mejor. :)
¡De nuevo me he encontrado con implementaciones de manejadores de eventos que no entiendo! Cuando se crea una aplicación personalizada, se supone que para conectar la interfaz gráfica de usuario a través de una clase:
#include "Menu.mqh"
CProgram program;
pero entonces, ¿cómo atrapar las pulsaciones de botones, cómo obtener los estados de las casillas de verificación y los valores de los campos de entrada, si están en la zona privada de la clase CProgram? ¿Debo mover lo que necesito a público o no entiendo algo?
...
pero luego cómo atrapar las pulsaciones de botones, cómo obtener los estados de las casillas de verificación y los valores de los campos de entrada, ...
En el manejador CProgram.
//+------------------------------------------------------------------+
//| Manejador de eventos|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{
//--- Evento click en la etiqueta de texto
if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL)
{
}
}
//---
Todos los artículos tienen archivos de ejemplo de aplicaciones MQL que muestran como manejar los eventos de los controles.
En el manejador CProgram.
//+------------------------------------------------------------------+
//| Manejador de eventos|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{
//--- Evento click en la etiqueta de texto
if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL)
{
}
}
//---
Todos los artículos tienen archivos de ejemplo de aplicaciones MQL que muestran como manejar eventos de control.
En el manejador CProgram está claro, pero este manejador es para la interfaz, ¿verdad? ¡Usted no debe meter soluciones comerciales en él! ¡Entiendo muy poco acerca de OOP, sobre todo todo mi conocimiento proviene de sus artículos, así que puedo ser estúpido! :)
Así, por ejemplo, ¿cómo implementar en el Asesor Experto la apertura de una orden, el lotness de los cuales se establece en el campo de entrada? ¡Necesito obtener el valor de este campo en el propio EA!
En el manejador CProgram está claro, pero este manejador es para la interfaz, ¿verdad? ¡No deberías estar metiendo soluciones comerciales en él!
¿Por qué no? Sí, usted puede. Es una clase de su MQL-aplicación (indicador o Asesor Experto). Todo es lo mismo.
Usted puede obtener el valor del campo de entrada de esta manera: