Galleria di interfacce utente scritte in MQL - pagina 66

 
Continuiamo con una nuova pagina.
 

12. Ottenere/impostare programmaticamente i limiti di valore delcursore e del campo con i pulsanti (_V_MIN, _V_MAX, _V_STEP, _DIGITS).

1. Apriamo una finestra con gli elementi con i parametri di cui sopra:

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


2. Scriviamo i valori di _V_MIN, _V_MAX, _V_STEP, _DIGITS e li pubblichiamo nel 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);
   //------------------------------------------------

Risultato: i valori delle proprietà dei parametri del cursore vengono registrati.


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


3. Ripetiamo l'operazione con il campo con i pulsanti. A differenza dello slider, il campo ha altri confini numerici e il suo tipo di valore è double.

   //------------------------------------------------
   //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);
   //------------------------------------------------ 

Risultato: ivalori delle proprietà dei parametri del campo con i pulsanti vengono visualizzati nel log.


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


4. Impostare altri limiti dell'intervallo dello slider (testato per la prima volta, il risultato è sconosciuto).

   //------------------------------------------------
   //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);
   //------------------------------------------------

Risultato: *trovato unproblema con l'intervallo in numeri negativi (risolto nella prossima versione).




Verifichiamo i limiti positivi dell'intervallo:

   //------------------------------------------------
   //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);
   //------------------------------------------------


Risultato: i limiti dell'intervallo sono stati modificati con successo.


Punto principale: L'intervallo del cursore può essere modificato utilizzando la sua funzione.

**Importante:non è possibile modificare retroattivamente il tipo di valore del parametro da int a double o viceversa.

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


Eseguiamo un esperimento simile con il campo di input:

   //------------------------------------------------
   //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);
   //------------------------------------------------

Risultato: funziona come previsto. Il campo con i pulsanti accetta l'intervallo e il passo specificati. Se l'intervallo viene superato, viene segnalato un errore nel log.

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


5. Infine, impostiamo il valore_DIGITS sul campo con i pulsanti (lo slider non funzionerà perché il suo tipo di parametro è int):

  • Impostiamo il valore del passo con quattro cifre dopo il punto.
  • La variabile cifre è impostata su 4 (quattro cifre decimali).

       //------------------------------------------------
       //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);
       //------------------------------------------------


    Risultato:

    • All'inizio c'erano tre cifre dopo il punto decimale (il numero originale prima della modifica del software).


    • Poi, la chiamata software ha aumentato la precisione a quattro cifre:


    • Successivamente, a 7 cifre:
    //Setting 7 digits after the decimal point:
    
    w6_d_p5_S_EDIT_Spin_the_value(7,p5_DIGITS);



    Risultati:

    • È possibile reimpostare programmaticamente i limiti dell'intervallo di numeri originali del campo del pulsante e del cursore.
    • È possibile modificare programmaticamente la precisione iniziale del valore doppio impostando un numero diverso di cifre decimali.
    • Il cursore ha un problema con il calcolo dei valori entro i confini dei numeri negativi (verrà risolto).
    • Non è possibile ripristinare il tipo originale del parametro dell'elemento.

    Questo conclude l'argomento.

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

    13. Interrogazione dello stato degli elementi _GET_STATE.

    Spesso si verificano situazioni in cui è necessario ottenere programmaticamente lo stato di uno o più elementi dell'interfaccia. Per risolvere questo problema viene creato l'identificatore _GET_STATE.

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

    *Importante:la funzione request_GET_STATE restituisce l'indice dello stato corrente dell'elemento.

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

    L'immagine seguente mostra l'elenco degli stati dell'elemento.

    1. identificatori di stato :

    (*nellaprossima release, il prefisso v_ sarà sostituito dal prefisso s_)


    Indici inviati al log:

      v_NEUTRAL_STATE           15
      //-----------------------------
      v_ACTIVATED_STATE         62
      //-----------------------------
      v_NEUTRAL_BLOCKED         64
      //-----------------------------
      v_ACTIVATED_BLOCKED       65   
      //----------------------------- 
      v_NEUTRAL_HIGHLIGHTED     66  
      //-----------------------------
      v_ACTIVATED_HIGHLIGHTED   67


    Proviamo a interrogare e recuperare gli stati degli elementi:

    1. Aprire la finestra e ottenere lo stato iniziale del pulsante "Avvio":


    int _OnInit()
      {
       //------------------------------------------------
       //Open the window "Settings example 1".
       //------------------------------------------------
       w_6_Settings_example_1();
       //------------------------------------------------
       //Get state of button "Start":
       //------------------------------------------------
       int Button_state = w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
       //------------------------------------------------
       //Print out:
       //------------------------------------------------
       Print("Button state:  ",Button_state);
       //------------------------------------------------


    Risultato: si ottiene il valore 15 corrispondente allo stato v_NEUTRAL_STATE.



    2. Registriamo gli stati del pulsante alla pressione e al rilascio:

    Per fare ciò:

    • Individuiamo il pulsante nel file API.
    • Scriviamo una richiesta _GET_STATE per entrambi i casi - premuto e rilasciato.
    case Settings_example_1___Start:
    
                   //------------------------------------------------------------------------------------------------------
                   //What to do when the button is pressed or released?
                   //------------------------------------------------------------------------------------------------------
                   switch((int)action)
                   {
                    //------------------------------------------------------------------------
                    case pressed: 
                                   {
                                    //Get button's state when it pressed:
                                    int Button_state =  w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
                                    
                                    //Print out the result:
                                    Print("Button state:  ",Button_state);
                                   }
                    break;
                    //------------------------------------------------------------------------
                    case released: 
                                   {
                                    //Get button's state when it released:
                                    int Button_state =  w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
                                    
                                    //Print out the result:
                                    Print("Button state:  ",Button_state);
                                   }
                    break;
                    //------------------------------------------------------------------------
                   }
                   //------------------------------------------------------------------------------------------------------
                   //Your comment:
                   //------------------------------------------------------------------------------------------------------
                   break;
    


    Risultato: sull'evento premuto/rilasciato, l'indice dello stato corrente viene stampato nel log.

    Promemoria:

    15 = v_NEUTRAL_STATE
    
    62 = v_ACTIVATED_STATE

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


    3. Ripetiamo la query con la casella di controllo.



    1. Otteniamo lo stato della casella di controllo sull'evento di apertura della finestra:

       //------------------------------------------------
       //Open the window "Settings example 1".
       //------------------------------------------------
       w_6_Settings_example_1();
       //------------------------------------------------
       
       //Get the state of the checkbox when it checked:
       int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
       
       //Print out the result:
       Print("Checkbox state:  ",Checkbox_state);
       //------------------------------------------------

    Risultato: si ottiene il valore 15, corrispondente allo stato neutro v_NEUTRAL_STATE (dove si trova la casella di controllo).




    2. Successivamente, interroghiamo gli stati della casella di controllo sull'evento di pressione e rilascio.

    Per fare questo:

    • Troviamo la casella di controllo"Imposta un'opzione" nel file API.
    • Scriviamo la query _GET_STATE per entrambi i casi: checked e unchecked.
    case Settings_example_1___Set_an_option:
      
                   //------------------------------------------------------------------------------------------------------
                   //What to do when the checkbox is checked or unchecked? 
                   //------------------------------------------------------------------------------------------------------
                    case checked: 
                                   {
                                    //Get checkbox state when it checked:
                                    int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
                                    
                                    //Print out the result:
                                    Print("Checkbox state:  ",Checkbox_state);
                                   }
                    break;
                    //------------------------------------------------------------------------
                    case unchecked: 
                                   {
                                    //Get checkbox state when it unchecked:
                                    int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
                                    
                                    //Print out the result:
                                    Print("Checkbox state:  ",Checkbox_state);
                                   }
                    break;
                   //------------------------------------------------------------------------------------------------------
                   //Your comment:
                   //------------------------------------------------------------------------------------------------------
                   break;


    Risultato: otteniamo i valori 66 (v_NEUTRAL_HIGHLIGHTED) e 67 (v_ACTIVATED_HIGHLIGHTED), che significano stato neutro evidenziato e stato premuto evidenziato.

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

    Con questo si conclude la prima parte dell'argomento.

    Nella seconda parte, verranno restituiti gli stati dell'elenco a discesa D_LIST, del cursore H_SLIDER e dei campi di input S_EDIT e EDIT.

     
    Ho iniziato a utilizzare uno scambio di criptovalute chiamato coinsbitfx.com. Coins Bit FX affermava di essere registrato presso la National Futures Association per convincere gli utenti della sua legittimità. A un certo punto ho creduto che il mio conto fosse cresciuto di valore fino a 135.134 dollari. Ma quando ho cercato di prelevare fondi dal mio conto, la borsa mi ha detto che la transazione era "in fase di revisione". Da allora il residente non è stato in grado di contattare nessuno del sito web e non può accedere ai fondi investiti. Questo mi ha dato alla testa, così ho letto di RECOVERYCOINGROUP AT GMAIL DOT COM su un blog, ho fatto le mie ricerche e ho deciso di avvalermi dei loro servizi; in meno di 72 ore i miei fondi sono stati tutti recuperati, e come se non bastasse hanno recuperato anche i BTC dei miei amici. Quindi sono abbastanza coraggioso da far conoscere al mondo questi ragazzi. Sentitevi liberi di contattare il Recovery Coin Group oggi stesso e ringraziatemi in seguito !