Discusión sobre el artículo "Interfaces gráficas VII: Control "Pestañas" (Capítulo 2)" - página 2

 
Anatoli Kazharski:

Por supuesto. )

La próxima actualización para esta clase(CTabs) será "Modo Tabulador Multilínea".

Como aquí (múltiples filas) :

Super. Lástima que por ahora las tablas y listas son sólo tablas y listas. Hasta ahora, prácticamente sólo sirven como visualización de datos sin ninguna interactividad.

Me gustaría, por supuesto, tomar y seleccionar las columnas / filas necesarias de listas / tablas, y realizar algunas manipulaciones con ellos - por ejemplo: hay una lista, poner casillas de verificación, o en general completamente seleccionado las filas necesarias, y se muestra en una ventana separada los datos generales sobre las filas seleccionadas .... Algo así sería super :)

Sin embargo, para poder hacer esto, es necesario añadir métodos para manipular estos datos. Tal vez ya existe, pero no lo sé?

 
Artyom Trishkin:

Estupendo. Lástima que las tablas y las listas sean sólo tablas y listas. Hasta ahora, prácticamente sólo sirven como visualización de datos sin ninguna interactividad.

...

Para la mayoría de lo anterior, está todo ahí.

La selección de un elemento en las listas(CListView) genera un evento, que se puede utilizar para determinar qué elemento se ha seleccionado y qué valor actual se ha seleccionado.

Lo mismo ocurre en las tablas(CTable). Cuando se selecciona una fila de una tabla, se genera un evento, sus parámetros contienen el índice de la fila ( parámetro dparam), mediante el cual se pueden obtener los valores de las celdas de esta fila usando el método CTable::GetValue():

//+------------------------------------------------------------------+
//| Devuelve el valor en los índices especificados | 
//+------------------------------------------------------------------+
string CTable::GetValue(const int column_index,const int row_index)
  {
//--- Comprobar si se sale del rango de columnas
   int csize=::ArraySize(m_vcolumns);
   if(csize<1 || column_index<0 || column_index>=csize)
      return("");
//--- Comprobación de salida de rango de filas
   int rsize=::ArraySize(m_vcolumns[column_index].m_vrows);
   if(rsize<1 || row_index<0 || row_index>=rsize)
      return("");
//--- Valor de retorno
   return(m_vcolumns[column_index].m_vrows[row_index]);
  }

//---

Y en el modo de edición de celdas de la tabla se genera un evento, en cuyos parámetros (parámetro sparam) se puede obtener una cadena con número de columna, con número de fila y valor actual en la celda que se está editando, en el formato "columna_fila_texto".

Artyom Trishkin:

Me gustaría, por supuesto, tomar y seleccionar las columnas / filas necesarias de listas / tablas, y realizar algunas manipulaciones con ellos - por ejemplo: hay una lista, poner casillas de verificación, o en general seleccionar las filas necesarias, y mostrar en una ventana separada los datos generales sobre las filas seleccionadas.... Algo así sería super :)

Voy a hacer clases separadas para las listas con casillas de verificación y botones de radio más tarde.

 
Hola. Un artículo muy bueno, pero de momento tengo algunas preguntas:

1.)
No encuentro una información, como puedo añadir controles simples CLabel o CEdit al formulario. (De objects.mqh)
No tienen una función como WindowPointer().
Puedo crear estos objetos, pero no puedo adjuntarlos a la ventana.

El
CWndContainer::AddToElementsArray(m_subwin, _MyEditBox);
no funciona en este caso...

2.)
¿Es el CComboBox un objeto estático. ¿Es posible modificar la lista de elementos en el

ComboBox-Listview después de la creación del ComboBox?

Gracias.

 

Tol, algo que no puedo ganar... Hay dos ventanas. Desde la primera - desde el menú principal abrimos la segunda ventana, que tiene 4 pestañas con iconos. Cada pestaña tiene su propia tabla vinculada a ella.

El problema es el siguiente: al abrir la primera ventana, siempre está visible la tabla construida más recientemente, y no importa que antes de abrir la ventana se cambie programáticamente la pestaña a la necesaria - se selecciona como debe ser, pero la tabla que hay en ella no es la que está vinculada a ella, sino la más reciente.

Hice un ejemplo. Imagen de la primera ventana que se abre:

Como se puede ver, la pestaña 1 está resaltada, pero es visible la tabla que está vinculada a la pestaña 4 - está escrito en la propia tabla en los encabezados de las columnas.

Además, si cambia de pestaña, las tablas se colocan donde se supone que deben estar, he resaltado la segunda pestaña con el ratón:

De vuelta a la primera:

¿Qué estoy haciendo mal? ¿O es un error?

Archivos en el trailer. Indicador.

Archivos adjuntos:
 
Artyom Trishkin:

...

¿Qué estoy haciendo mal? ¿O es un error?

Funciona correctamente con las pestañas CTabs . Pero para las pestañas CIconTabs todavía no he hecho matrices personales en el motor de la biblioteca y la visualización automática del contenido de la pestaña seleccionada al abrir un cuadro de diálogo. Esto se arreglará en la próxima actualización.

Pero como solución temporal, ya puedes rastrear la apertura de un cuadro de diálogo en una clase personalizada y actualizar las pestañas como se muestra en el siguiente listado:

//+------------------------------------------------------------------+
//| Manejador de eventos|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   if(id==CHARTEVENT_CUSTOM+ON_OPEN_DIALOG_BOX)
     {
      if(lparam==m_window2.Id())
         m_icon_tabs.ShowTabElements();
     }
  }
 
Anatoli Kazharski:

Funciona correctamente con pestañas de tipo CTabs . Pero para las pestañas CIconTabs todavía no he hecho matrices personales en el motor de la biblioteca y la visualización automática del contenido de la pestaña seleccionada al abrir una ventana de diálogo. Esto se arreglará en la próxima actualización.

Pero como solución temporal ahora mismo ya puedes rastrear la apertura de un cuadro de diálogo en una clase personalizada y actualizar las pestañas como se muestra en el listado de abajo:

//+------------------------------------------------------------------+
//| Manejador de eventos|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   if(id==CHARTEVENT_CUSTOM+ON_OPEN_DIALOG_BOX)
     {
      if(lparam==m_window2.Id())
         m_icon_tabs.ShowTabElements();
     }
  }
Gracias. Funciona así. Ahora voy a poner dos cuadros superpuestos en cada pestaña - a ver ;)
 
HI , si enrollo el Dialog, y cambio el period.el Dialog no esta bien.en MT4.
 
Al compilar, genera errores como:
'return' - cannot convert from const pointer to nonconst pointer        SplitButton.mqh 90      65
. Se puede subsanar borrando Const en las líneas correspondientes.
 

Estoy intentando añadir un campo de entrada a una pestaña pero no funciona.

input double whenToTrail=10.3;

class CProgram: public CWndEvents
{
protected:
   CSpinEdit         m_StartTS;
//Código
protected:
   bool              CreatetrailStop(const int x_gap, const int y_gap, const string text);
};


entonces la función.

bool CProgram::CreatetrailStop(const int x_gap, const int y_gap, string text)
  {
//--- Guardar el puntero al elemento principal
   m_StartTS.WindowPointer(m_window);
//--- Coordenadas
   int x = m_window.X() + x_gap;
   int y = m_window.Y() + y_gap;
//--- Reserva para la ficha
   m_tabs.AddToElementsArray(1, m_StartTS);
//--- Propiedades
   m_StartTS.XSize(95);
   m_StartTS.YSize(15);
   m_StartTS.EditXSize(40);
   m_StartTS.MinValue(0.01);
   m_StartTS.StepValue(0.01);
   m_StartTS.SetDigits(1);
   m_StartTS.SetValue(NormalizeDouble(whenToTrail,1));
   
   m_StartTS.ResetMode(true);
//--- Crear un control
   if(!m_StartTS.CreateSpinEdit(m_chart_id, m_subwin, text, x, y))
      return(false);
//--- Añade el objeto al array común de grupos de objetos
   CWndContainer::AddToElementsArray(0, m_StartTS);
   return(true);
  }

este objeto no esta adjunto al Panel pero esta en el grafico.

y despues de borrar el grafico el objeto permanece
 
Hola, este artículo me interesa mucho, he intentado instalarlo pero al compilarlo me da estos errores:

archivo de recursos '\ Images \ EasyAndFastGUI \ Controls \ LeftTransp_black.bmp' no se encuentra Calendar.mqh 443 11
archivo de recursos '\ Images \ EasyAndFastGUI \ Controls \ LeftTransp_blue.bmp' no se encuentra Calendar.mqh 444 11
resource file '\ Images \ EasyAndFastGUI \ Controls \ calendar_today.bmp' not found Calendario.mqh 738 11
resource file '\ Images \ EasyAndFastGUI \ Controls \ calendar_drop_on.bmp' not found DropCalendar.mqh 435 11
resource file '\ Images \ EasyAndFastGUI \ Controls \ calendar_drop_off.bmp' not found DropCalendar.mqh 436 11
resource file '\ Images \ EasyAndFastGUI \ Controls \ calendar_drop_locked.bmp' not found DropCalendar.mqh 437 11
resource file '\ Images \ EasyAndFastGUI \ Controls \ RightTransp_rotate_black.bmp' not found TreeItem.mqh 247 11
resource file '\ Images \ EasyAndFastGUI \ Controls \ RightTransp_rotate_white.bmp' not found TreeItem.mqh 248 11
resource file '\ Images \ EasyAndFastGUI \ Controls \ pointer_x_resize.bmp' not found Pointer.mqh 8 11
resource file '\ Images \ EasyAndFastGUI \ Controls \ pointer_x_resize_blue.bmp' not found Pointer.mqh 9 11
resource file '\ Images \ EasyAndFastGUI \ Controls \ pointer_y_resize.bmp' not found Pointer.mqh 10 11
resource file '\ Images \ EasyAndFastGUI \ Controls \ pointer_y_resize_blue.bmp' not found Pointer.mqh 11 11
resource file '\ Images \ EasyAndFastGUI \ Controls \ pointer_xy1_resize.bmp' not found Pointer.mqh 12 11
resource file '\ Images \ EasyAndFastGUI \ Controls \ pointer_xy1_resize_blue.bmp' not found Pointer.mqh 13 11
resource file '\ Images \ EasyAndFastGUI \ Controls \ pointer_xy2_resize.bmp' not found Pointer.mqh 14 11
resource file '\ Images \ EasyAndFastGUI \ Controls \ pointer_xy2_resize_blue.bmp' not found Pointer.mqh 15 11
resource file '\ Images \ EasyAndFastGUI \ Icons \ bmp16 \ folder.bmp' not found FileNavigator.mqh 284 11
archivo de recursos '\ Images \ EasyAndFastGUI \ Icons \ bmp16 \ text_file.bmp' no se encuentra FileNavigator.mqh 285 11

He mirado en el archivo zip MQL5 pero los archivos no están, ¿hay alguna manera de conseguirlos?
Gracias