Galería de interfaces de usuario escritas en MQL - página 66

 
Continuemos con una nueva página.
 

12. Obtención/configuración programática de los límites de valor del deslizador y del campo con botones (_V_MIN, _V_MAX, _V_STEP, _DIGITS).

1. Abramos una ventana con elementos con los parámetros anteriores:

int _OnInit()
  {
   //------------------------------------------------
   //Open the window "Settings example 1".
   //------------------------------------------------
   w_6_Settings_example_1();
   //------------------------------------------------


2. 2. Escribamos los valores de _V_MIN, _V_MAX, _V_STEP, _DIGITS y enviémoslos al log:

   //------------------------------------------------
   //Get parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP, _DIGITS
   //------------------------------------------------
   int Min_value = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_V_MIN);
   int Max_value = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_V_MAX);
   int Step      = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_V_STEP);
   int digits    = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_DIGITS);
   //------------------------------------------------
   //Print the results:
   //------------------------------------------------
   Print("Min_value:  ",Min_value,"  Max_value:  ",Max_value,"  Step:  ",Step,"  digits:  ",digits);
   //------------------------------------------------

Resultado: se registran los valores de las propiedades de los parámetros del deslizador.


//---------------------------------------------------------------------------------------------------------------------------------------


3. Repitamos la operación con el campo con botones. A diferencia del deslizador, el campo tiene otros límites numéricos y su tipo de valor es doble.

   //------------------------------------------------
   //Get parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP, _DIGITS
   //------------------------------------------------
   double _Min_value  =  w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_V_MIN);
   double _Max_value  =  w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_V_MAX);
   double _Step       =  w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_V_STEP);
   double _digits     =  w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_DIGITS);
   //------------------------------------------------
   Print("Min_value:  ",_Min_value,"  Max_value:  ",_Max_value,"  Step:  ",_Step,"  digits:  ",_digits);
   //------------------------------------------------ 

Resultado: losvalores de las propiedades de los parámetros del campo con botones se muestran en el registro.


//---------------------------------------------------------------------------------------------------------------------------------------


4. Establecer otros límites del rango del deslizador (probado por primera vez, el resultado es desconocido).

   //------------------------------------------------
   //Set parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP.
   //------------------------------------------------
   Min_value = -100;
   Max_value = 100;
   Step      = 1;
   //-----------------
   w6_i_p3_H_SLIDER_Roll_the_value(Min_value, p3_V_MIN);
   w6_i_p3_H_SLIDER_Roll_the_value(Max_value, p3_V_MAX);
   w6_i_p3_H_SLIDER_Roll_the_value(Step,      p3_V_STEP);
   //------------------------------------------------

Resultado: *se ha encontrado unproblema con el rango en números negativos (arreglo en la próxima versión).




Comprobemos con limites de rango positivos:

   //------------------------------------------------
   //Set parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP.
   //------------------------------------------------
   Min_value = 0;
   Max_value = 1000;
   Step      = 1;
   //-----------------
   w6_i_p3_H_SLIDER_Roll_the_value(Min_value, p3_V_MIN);
   w6_i_p3_H_SLIDER_Roll_the_value(Max_value, p3_V_MAX);
   w6_i_p3_H_SLIDER_Roll_the_value(Step,      p3_V_STEP);
   //------------------------------------------------


Resultado: límites de rango cambiados con éxito.


Punto principal: El rango del deslizador puede ser cambiado usando su función.

**Importante:No se puede cambiar retroactivamente el tipo de valor del parámetro de int a double o viceversa.

//-------------------------------------------------------------------------------------------------


Hagamos un experimento similar con el campo de entrada:

   //------------------------------------------------
   //Set NEW parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP, _DIGITS
   //------------------------------------------------
   double _Min_value  = -100.0;
   double _Max_value  =  100.0;
   double _Step       =  2.5;
   //-----------------
   //Set another default value---
   w6_d_p5_S_EDIT_Spin_the_value(50.5);
   //-----------------
   w6_d_p5_S_EDIT_Spin_the_value(_Min_value,p5_V_MIN);
   w6_d_p5_S_EDIT_Spin_the_value(_Max_value,p5_V_MAX);
   w6_d_p5_S_EDIT_Spin_the_value(_Step     ,p5_V_STEP);
   //------------------------------------------------

Resultado: Funciona según lo previsto. El campo con botones acepta el rango y el paso especificados. Si se sobrepasa el rango, informa de un error en el log.

//--------------------------------------------------------------------------------------------------


5. Por último, vamos a establecer el valor_DIGITOS al campo con botones (el deslizador no funcionará porque su tipo de parámetro es int):

  • Pongamos el valor del paso con cuatro dígitos después del punto.
  • La variable dígitos se establece en 4 (cuatro decimales).

       //------------------------------------------------
       //Set parameter properties, such as: 
       //_V_MIN, _V_MAX, _V_STEP, _DIGITS
       //------------------------------------------------
       double _Min_value  = -100.0;
       double _Max_value  =  100.0;
       double _Step       =  2.5567;
              digits      =  4;
       //-----------------
       //Set another default value---
       w6_d_p5_S_EDIT_Spin_the_value(50.5);
       //-----------------
       w6_d_p5_S_EDIT_Spin_the_value(_Min_value,p5_V_MIN);
       w6_d_p5_S_EDIT_Spin_the_value(_Max_value,p5_V_MAX);
       w6_d_p5_S_EDIT_Spin_the_value(_Step     ,p5_V_STEP);
     
       //Set the new number of digits:
       w6_d_p5_S_EDIT_Spin_the_value(digits    ,p5_DIGITS);
       //------------------------------------------------


    Resultado:

    • Al principio, había tres dígitos después del punto decimal (el número original antes del cambio de software).


    • Después, la llamada de software aumentó la precisión a cuatro dígitos:


    • A continuación, a 7 dígitos:
    //Setting 7 digits after the decimal point:
    
    w6_d_p5_S_EDIT_Spin_the_value(7,p5_DIGITS);



    Resultado:

    • Es posible restablecer mediante programación los límites del intervalo numérico original del campo de botón, así como del control deslizante.
    • Es posible cambiar programáticamente la precisión inicial del valor doble estableciendo un número diferente de decimales.
    • El deslizador tiene un problema con el cálculo de valores dentro de los límites de números negativos (se solucionará).
    • No se puede restablecer el tipo original del parámetro elemento.

    Con esto concluye este tema.

    Графические интерфейсы VI: Элементы "Слайдер" и "Двухсторонний слайдер" (Глава 2)
    Графические интерфейсы VI: Элементы "Слайдер" и "Двухсторонний слайдер" (Глава 2)
    • www.mql5.com
    В предыдущей статье разрабатываемая библиотека была пополнена сразу четырьмя довольно часто используемыми в графических интерфейсах элементами управления: «чекбокс», «поле ввода», «поле ввода с чекбоксом» и «комбобокс с чекбоксом». Вторая глава шестой части серии будет посвящена таким элементам управления, как слайдер и двухсторонний слайдер.