Galeria de UIs escritas em MQL - página 66

 
Vamos continuar com uma nova página.
 

12. Obter/definir programaticamente os limites de valor docontrole deslizante e docampo com botões (_V_MIN, _V_MAX, _V_STEP, _DIGITS).

1. vamos abrir uma janela com elementos com os parâmetros acima:

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


2. Vamos escrever os valores de _V_MIN, _V_MAX, _V_STEP, _DIGITS e enviá-los para o registro:

   //------------------------------------------------
   //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: os valores das propriedades dos parâmetros do controle deslizante são registrados.


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


3. Vamos repetir a operação com o campo com botões. Ao contrário do controle deslizante, o campo tem outros limites numéricos e seu tipo de valor é duplo.

   //------------------------------------------------
   //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:os valores das propriedades de parâmetro do campo com botões são exibidos no registro.


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


4. Defina outros limites do intervalo do controle deslizante (testado pela primeira vez, o resultado é desconhecido).

   //------------------------------------------------
   //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: *Encontrado umproblema com o intervalo em números negativos (correção na próxima versão).




Vamos verificar com limites de intervalo 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: os limites do intervalo foram alterados com sucesso.


Ponto principal: O intervalo do controle deslizante pode ser alterado usando sua função.

**Importante:você não pode alterar retroativamente o tipo de valor do parâmetro de int para double ou vice-versa.

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


Vamos realizar um experimento semelhante com o 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 como planejado. O campo com botões aceita o intervalo e a etapa especificados. Se o intervalo for excedido, ele relatará um erro no registro.

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


5. Por fim, vamos definir o value_DIGITS para o campo com botões (o controle deslizante não funcionará porque seu tipo de parâmetro é int):

  • Vamos definir o valor da etapa com quatro dígitos após o ponto final.
  • A variável digits é definida como 4 (quatro casas decimais).

       //------------------------------------------------
       //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:

    • No início, havia três dígitos após o ponto decimal (o número original antes da alteração do software).


    • Em seguida, a chamada de software aumentou a precisão para quatro dígitos:


    • Em seguida, para 7 dígitos:
    //Setting 7 digits after the decimal point:
    
    w6_d_p5_S_EDIT_Spin_the_value(7,p5_DIGITS);



    Resultados:

    • A capacidade de redefinir programaticamente os limites originais do intervalo de números do campo de botão e do controle deslizante está disponível.
    • É possível alterar programaticamente a precisão inicial do valor duplo, definindo um número diferente de casas decimais.
    • O controle deslizante tem um problema com o cálculo de valores dentro dos limites de números negativos (será corrigido).
    • O tipo original do parâmetro do elemento não pode ser redefinido.

    Isso conclui este tópico.

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