Discusión sobre el artículo "Interfaces gráficas X: Gestión ampliada de las listas y tablas. Optimización de código (build 7)" - página 9
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
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: