Discusión sobre el artículo "Interfaces gráficas X: Nuevas posibilidades para la tabla dibujada (build 9)" - página 2

 
Artyom Trishkin:
Sí, a mí también me funciona, pero con la biblioteca antigua.

Hazlo con la nueva Build6,7,8 o 9 por favor.
 
Anatoli Kazharski:
Utilice MetaTrader 5. La versión MetaTrader 4 ya no tiene soporte y no puedo aconsejarte nada.
Gracias por su respuesta. (n.b. Le pregunté si funciona con la nueva construcción)

¿Está bien abajo?
//+------------------------------------------------------------------+
//| Создаёт общую площадь                                            |
//+------------------------------------------------------------------+
bool CColorPicker::CreateArea(void)
  {
//--- Формирование имени объекта
   string name=CElementBase::ProgramName()+"_color_picker_bg_"+(string)CElementBase::Id();
//--- Координаты
   int x=CElementBase::X();
   int y=CElementBase::Y();
//--- Создать объект
   if(!m_area.Create(m_chart_id,name,m_subwin,x,y,m_x_size,m_y_size))
      return(false);
//--- Свойства
   m_area.BackColor(m_area_color);
   m_area.Color(m_area_border_color);
   m_area.BorderType(BORDER_FLAT);
   m_area.Corner(m_corner);
   m_area.Selectable(false);
   m_area.Z_Order(m_area_zorder);
   m_area.Tooltip("\n");
//--- Координаты
   m_canvas.X(x);
   m_canvas.Y(y);
//--- Размеры
   m_canvas.XSize(m_x_size);
   m_canvas.YSize(m_y_size);

//--- Отступы от крайней точки
   m_area.XGap(CElement::CalculateXGap(x));
   m_area.YGap(CElement::CalculateYGap(y));
//--- Сохраним указатель объекта
   CElementBase::AddToArray(m_area);
   return(true);
  }


 
stt:
Gracias por su respuesta. (n.b. Le pregunté si funciona con la nueva versión)

¿Está bien abajo?
//+------------------------------------------------------------------+
//| Создаёт общую площадь                                            |
//+------------------------------------------------------------------+
bool CColorPicker::CreateArea(void)
  {
//--- Формирование имени объекта
   string name=CElementBase::ProgramName()+"_color_picker_bg_"+(string)CElementBase::Id();
//--- Координаты
   int x=CElementBase::X();
   int y=CElementBase::Y();
//--- Создать объект
   if(!m_area.Create(m_chart_id,name,m_subwin,x,y,m_x_size,m_y_size))
      return(false);
//--- Свойства
   m_area.BackColor(m_area_color);
   m_area.Color(m_area_border_color);
   m_area.BorderType(BORDER_FLAT);
   m_area.Corner(m_corner);
   m_area.Selectable(false);
   m_area.Z_Order(m_area_zorder);
   m_area.Tooltip("\n");
//--- Координаты
   m_canvas.X(x);
   m_canvas.Y(y);
//--- Размеры
   m_canvas.XSize(m_x_size);
   m_canvas.YSize(m_y_size);

//--- Отступы от крайней точки
   m_area.XGap(CElement::CalculateXGap(x));
   m_area.YGap(CElement::CalculateYGap(y));
//--- Сохраним указатель объекта
   CElementBase::AddToArray(m_area);
   return(true);
  }


Las últimas versiones de la biblioteca, el cálculo de coordenadas del objeto era diferente. Es necesario utilizar las nuevas normas especifican las coordenadas del objeto, o en sus propios métodos para volver a calcular las coordenadas de la forma habitual.

Por ejemplo, usted necesita:

En WndEvents.mqh en el área pública crear un nuevo método:
   //--- Crea una paleta de colores para la selección de colores
   bool              CreateColorPicker(CColorPicker &color_picker, CWindow &wnd_pointer, int wnd_index,int x,int y);
Fuera del cuerpo de la clase crea un cuerpo de método:
//+------------------------------------------------------------------+
//|| Crea una paleta de colores para seleccionar un color //||
//+------------------------------------------------------------------+
bool CWndEvents::CreateColorPicker(CColorPicker &color_picker, CWindow &wnd_pointer, int wnd_index, int x, int y)
  {
//--- recalcular las coordenadas
   int x_gap=x-wnd_pointer.X();
   int y_gap=y-wnd_pointer.Y();
//--- Guardar el puntero de la ventana
   color_picker.WindowPointer(wnd_pointer);
//--- Creación de un elemento
   if(!color_picker.CreateColorPicker(m_chart_id,m_subwin,x_gap,y_gap))
      return(false);
//--- Añade un puntero al elemento en la base
   CWndContainer::AddToElementsArray(wnd_index,color_picker);
   return(true);
  }
//+------------------------------------------------------------------+

Y en CProgram.mqh crea tu ColorPicker:
   //--- Selector de color
   x=m_window_main.X2()+1;
   y=m_window_main.Y();
   if(!CreateColorPicker(m_color_picker,m_window_main,m_window_main_index,x,y))
      return(false);
Mira este ejemplo:


 
stt:
...
Sé que usted no es compatible con la versión MQL4, pero creo que MQL4 no es una razón.
Por favor, mostrar capturas de pantalla o vídeos que muestran el problema, y adjuntar archivos de prueba (MetaTrader 5) al mensaje.
 
Artyom Trishkin:
Las últimas versiones de la biblioteca, el cálculo de coordenadas del objeto era diferente. Es necesario utilizar las nuevas normas especifican las coordenadas del objeto, o en sus propios métodos para volver a calcular las coordenadas de la forma habitual.
......

Gracias por el tutorial. He comprobado y cambiado el cálculo de coordenadas. ColorPicker funciona bien en mi entorno pero sólo cuando se muestra en la ventana principal (W_MAIN).

¿Podría comprobarlo en la ventana W_DIALOG por favor?

ColorPicker en esta biblioteca es una herramienta muy potente para el ajuste fino de colores personalizados, pero me pregunto si una simple tabla de colores sería más conveniente para el uso diario.
 
¿es posible ordenar por columnas y eliminar filas en esta versión?
 
stt:
Gracias por el tutorial. He comprobado y cambiado el cálculo de coordenadas . ColorPicker funciona bien en mi entorno pero sólo cuando se muestra en la ventana principal (W_MAIN).

¿Podría comprobarlo en la ventana W_DIALOG por favor?

ColorPicker en esta biblioteca es una herramienta muy potente para el ajuste fino de colores personalizados, pero me pregunto si una simple tabla de colores sería más conveniente para el uso diario.
Por favor. Mira esto:

 
dantetemp:
¿es posible ordenar por columnas y borrar filas en esta versión?
Todavía no. Pero lo será pronto.
 
dantetemp:
¿es posible ordenar por columnas y borrar filas en esta versión?
@dantetemp, ya es posible. Descarga la última versión de la librería desde este artículo: Graphical Interfaces X: Sorting, Table Reconstruction and Cell Controls (build 11)
 

Buenas tardes. Tengo la siguiente pregunta: hay un campo de entrada SpinEdit:

bool CProgram::CreateSpinEdit_TradingLot(const string text)
{
//--- Guardar el puntero de la ventana
   m_spin_edit_Trading_lot.WindowPointer(m_window);
   m_tabs.AddToElementsArray(1,m_spin_edit_Trading_lot);
//--- Coordenadas
   int x=m_window.X()+SPINEDIT14_GAP_X;
   int y=m_window.Y()+SPINEDIT14_GAP_Y;
//--- Valor
   double v=(m_spin_edit_Trading_lot.GetValue()==WRONG_VALUE) ? 0.01 : m_spin_edit_Trading_lot.GetValue();
//--- Establecer propiedades antes de la creación
   m_spin_edit_Trading_lot.XSize(90);
   m_spin_edit_Trading_lot.YSize(18);
   m_spin_edit_Trading_lot.EditXSize(50);
   m_spin_edit_Trading_lot.MaxValue(100);
   m_spin_edit_Trading_lot.MinValue(0.01);
   m_spin_edit_Trading_lot.StepValue(0.01);
   m_spin_edit_Trading_lot.SetDigits(2);
   m_spin_edit_Trading_lot.SetValue(v);
   m_spin_edit_Trading_lot.ResetMode(false);
   m_spin_edit_Trading_lot.AreaColor(clrWhite);
//--- Crear un control
   if(!m_spin_edit_Trading_lot.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_spin_edit_Trading_lot);
   return(true);
}


Hay un manejador de eventos:

void CProgram::OnEventSpinEdit_TradingLot(void)
{
   TradingLot = m_spin_edit_Trading_lot.GetValue();
   Print("TradingLot = " + NormalizeDouble(TradingLot,2));
}

Y aún después de la función NormalizeDouble obtengo dichos valores cuando hago click en el incremento/decremento a la derecha del campo de entrada:


Cuando introduzco desde el teclado, todo es correcto.

¿Cuál puede ser la razón?