Galleria di interfacce utente scritte in MQL - pagina 63

 
hini #:
L a conversione forzata del tipo può essere inserita all'interno di una funzione in modo che l'utente non debba scrivere (stringa) al di fuori della funzione.

Non ho capito bene la domanda, quindi la mia risposta potrebbe essere fuori tema.

Si potrebbe fare in questo modo:


La funzione double effettua un ritorno a una variabile di tipo stringa utilizzando una conversione forzata nella fase di restituzione del valore.
string Spin_edit_value = (string)w6_d_p5_S_EDIT_Spin_the_value();

w7_s_p4_EDIT_Comment_2(Spin_edit_value);
 

Posso renderlo ancora più semplice:

w7_s_p4_EDIT_Comment_2((string)w6_d_p5_S_EDIT_Spin_the_value());
 

In teoria, si potrebbe fare in questo modo:

w7_s_p4_EDIT_Comment_2(w6_d_p5_S_EDIT_Spin_the_value());

Il compilatore stesso converte il doppio in stringa, ma non lo consiglierei.

 
Реter Konow #:

Non capisco bene la domanda, quindi la mia risposta potrebbe essere fuori tema.

Si può fare in questo modo:


La funzione double restituisce una variabile di tipo stringa mediante una conversione forzata nella fase di restituzione del valore.
All'interno della funzione w7_s_p4_EDIT_Comment_2 si converte quindi il tipo
double Spin_edit_value = 22.5;

w7_s_p4_EDIT_Comment_2(Spin_edit_value);
 
Реter Konow #:

In teoria si potrebbe fare:

Il compilatore stesso convertirà il doppio in stringa, ma non lo consiglio.

La funzione w7_s_p4_EDIT_Comment_2 non può generare una versione sovraccaricata corrispondente che riceve il tipo double?

 

Continua l'argomento dell'impostazione delle proprietà e della restituzione e inoltro dei valori tra gli elementi.


Abbiamo esaminato diverse opzioni:

1. Impostare il testo in un campo di input di testo.

w7_s_p4_EDIT_Comment_1("Some random text");

2. Assegnare un nuovo valore al cursore.

w6_i_p3_H_SLIDER_Roll_the_value(33);

3. Selezionate un numero arbitrario per il campo di immissione con pulsanti.

w6_d_p5_S_EDIT_Spin_the_value(423.11);

4. Inviate più stringhe di testo alle celle della tabella Informazioni sul conto.

w8_s_p4_CELL_Account_name__Value("MyRealAccount");  

w8_s_p4_CELL_Account_number__Value("A001234647843B1");

w8_s_p4_CELL_Account_server__Value("MyServer");

w8_s_p4_CELL_Account_currency__Value("US Dollar");

w8_s_p4_CELL_Leverage__Value("1:1");

w8_s_p4_CELL_Account_balance__Value("1234567.23 $");


5. Infine, abbiamo restituito il nuovo valore dell'elemento S_EDIT e lo abbiamo inviato a due finestre diverse: la cella della tabella Informazioni sul conto e il campo di immissione del testo nella finestra Impostazioni, esempio 2.

 double Spin_edit_value = w6_d_p5_S_EDIT_Spin_the_value();//Делаем возврат значения параметра (тип double).
w8_s_p4_CELL_Account_profit__Value((string)Spin_edit_value);//При пересылке значение double приводим к типу string. Функция ячейки имеет тип string.
w7_s_p4_EDIT_Comment_2((string)Spin_edit_value);

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


Per completare questo argomento e passare al successivo, dobbiamo fare alcune cose:

1. cambiare il colore della barra di scorrimento.

2. Cambiare il colore della base S_EDIT e del testo.

3. Cambiare i colori del pulsante negli stati premuto e non premuto.

4. Controllare l'invio di valori agli elementi sull'evento timer.

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


1. Cambiare il colore della barra di scorrimento:

   //To get slider's bar color:
   uint Sliders_bar_color = (uint)w6_i_p3_H_SLIDER_Roll_the_value(get_i, p3_COLOR_bar);
   
   //Print the returned value:
   Print("Sliders_bar_color =  ",Sliders_bar_color);

Risultato:



Assegnare un colore diverso alla barra di scorrimento:

   //To set slider's bar color:
   w6_i_p3_H_SLIDER_Roll_the_value((uint)clrRed, p3_COLOR_bar);


Risultato:

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


2 Cambiare il colore del testo e della base dell'elemento S_EDIT:

Otteniamo il colore originale della base del campo di input con i pulsanti:

   //To get spin edit's base color:
   uint Spin_edit_base_color = (uint)w6_d_p5_S_EDIT_Spin_the_value(get_d, p5_COLOR_base);

Trasmettiamolo al log:

   //Print the returned value:
   Print("Spin_edit_base_color = ",Spin_edit_base_color);


Assegnare un colore diverso alla base del campo:

   //To set spin edit's base color:
   w6_d_p5_S_EDIT_Spin_the_value((uint)clrLightGreen, p5_COLOR_base);

Risultato:


Impostazione del colore del testo del campo S_EDIT. (Il prefisso della proprietà p4 è usato al posto di p5, perché ho dimenticato di aggiungere la proprietà del colore del testo per S_EDIT. il bug sarà risolto nella prossima versione).

   //To set spin edit's text color:
   w6_d_p5_S_EDIT_Spin_the_value((uint)clrBrown, p4_COLOR_text);  


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


3. Cambiare i colori del pulsante negli stati premuto e non premuto:

Cambiare il colore del pulsante nello stato neutro:

w6_i_p1_BUTTON_Start((uint)C'255,166,0',p1_N_COLOR_base);


Impostare un colore diverso per lo stato attivato del pulsante:

w6_i_p1_BUTTON_Start((uint)C'166,255,0',p1_A_COLOR_base);


È possibile modificare anche il colore del testo del pulsante per gli stati neutro e premuto, ma su un carattere piccolo non si nota. Pertanto, scegliamo una finestra diversa:

   //Set text color for button's neutral state:

   //Button 1:
   w14_i_p1_BUTTON_BUY_OFF((uint)C'240,70,10',p1_N_COLOR_text);

   //Button 2:
   w14_i_p1_BUTTON_SELL_OFF((uint)C'240,70,10',p1_N_COLOR_text); 

Risultato:


   //Set text color for button's active state:
   
  //Button 1
   w14_i_p1_BUTTON_BUY_OFF((uint)C'105,240,50',p1_A_COLOR_text);

  //Button 2
   w14_i_p1_BUTTON_SELL_OFF((uint)C'105,240,50',p1_A_COLOR_text);

Risultato:


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


4. Controllare l'invio di valori agli elementi sull'evento timer:

void _OnTimer()
  {
   string Microseconds = (string)GetMicrosecondCount();
     
   //Send Microseconds to each cell-----------------
   w8_s_p4_CELL_Account_name__Value(Microseconds);
   w8_s_p4_CELL_Account_number__Value(Microseconds);
   w8_s_p4_CELL_Account_server__Value(Microseconds);
   w8_s_p4_CELL_Account_currency__Value(Microseconds);
   w8_s_p4_CELL_Leverage__Value(Microseconds);
   w8_s_p4_CELL_Account_balance__Value(Microseconds);
   w8_s_p4_CELL_Account_profit__Value(Microseconds);
   w8_s_p4_CELL_Account_equity__Value(Microseconds);
   w8_s_p4_CELL_Account_free_margin__Value(Microseconds);
   w8_s_p4_CELL_Account_margin__Value(Microseconds);
   w8_s_p4_CELL_Account_stop_out_level__Value(Microseconds);

Risultato:


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

Questo completa l'argomento.


Passiamo ora agli argomenti:

9. Ritorno del valore precedente (_V_LAST). Quando e in quali casi è richiesto l'ultimo valore (da non confondere con il valore corrente).

10. Verifica dell'impostazione degli stati ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK per diversi tipi di elementi.

 
hini #:

All'interno della funzione w7_s_p4_EDIT_Comment_2, quindi convertire il tipo

È possibile. Ma verrà visualizzato un ulteriore avviso, perché si tratta di una conversione di tipo implicita. Tecnicamente, è possibile inviare solo un numero. Senza una variabile. Lascio a ciascuno la propria discrezione.

 
hini #:

All'interno della funzione w7_s_p4_EDIT_Comment_2, convertire il tipo

La funzione w7_s_p4_EDIT_Comment_2 non contiene nulla. È un wrapper che chiama la funzione centrale. La funzione wrapper può restituire solo un valore del proprio tipo.



h ini #: La funzione w7_s_p4_EDIT_Comment_2 non può generare una versione sovraccarica corrispondente che prenda il tipo double?

Ahimè, non può, perché è un wrapper. Non ha senso complicarla. Tutto il lavoro viene svolto dalle funzioni centrali.
 
Реter Konow #:

La funzione w7_s_p4_EDIT_Comment_2 non ha nulla al suo interno . È solo un wrapper che chiama una funzione centrale. Le funzioni wrapper possono restituire solo valori del proprio tipo.


Non può, perché è un wrapper. Non c'è bisogno di complicarla. Tutto il lavoro viene svolto dalla funzione centrale.

Giusto.

 

Oggi analizziamo quattro argomenti:

9. Restituzione del valore precedente _V_LAST.

10. Impostazione degli stati ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK per diversi tipi di elementi.

11. Sincronizzazione delle modifiche dei parametri: ad esempio, campo di input con pulsanti e cursori. L'obiettivo è che quando il primo valore cambia, il secondo cambia di conseguenza. Impostiamo la comunicazione prima in una finestra, poi tra le finestre.

12. Reimpostare programmaticamente i confini dell'intervallo del cursore e del campo con pulsanti.

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

Finora abbiamo trattato i seguenti argomenti:

1. Orientamento nell'elenco di intellisense e selezione della funzione della finestra desiderata.

2. Apertura e chiusura delle finestre da parte del software.

3. Orientamento nell'elenco di intellisense e selezione dell'elemento richiesto nella finestra desiderata.

4. Navigazione negli elenchi delle proprietà dei singoli elementi.

5. Parsing del nome di un elemento e funzione wrapper della finestra.

6. restituzione del valore del parametro di un elemento selezionato a una variabile del suo tipo. Considerare tre tipi di elementi diversi.

7. Impostazione di valori nei parametri di diversi tipi di elementi. Vediamo come appariranno i valori nelle finestre dell'interfaccia di questi elementi.

8. Restituzione dei valori dei parametri di un elemento, modifica e inoltro del valore a un altro elemento. Considerare diversi tipi di elementi e valori e testare l'inoltro tra diversi tipi di elementi in diverse finestre.

9. Restituzione del valore precedente (_V_LAST). Quando e in quali casi è richiesto l'ultimo valore (da non confondere con il valore corrente).

10. Testare l'impostazione degli stati ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK per diversi tipi di elementi.

11. Proviamo a collegare e sincronizzare le modifiche dei valori di elementi di tipo diverso: ad esempio, campo di input con pulsanti e cursore. Supponiamo che quando il valore di un elemento (manuale o software) cambia, il valore del secondo elemento cambi di conseguenza.

12. Proviamo a reimpostare programmaticamente i confini dell'intervallo dello slider e del campo di input con pulsanti tramite funzioni wrapper. Non ho avuto il tempo di testarlo, ma qualcosa mi suggerisce che funzionerà. Comunque, vediamo.

13. Proviamo a restituire gli stati degli elementi tramite funzioni wrapper. È inclusa nella funzionalità, ma non ho avuto il tempo di testarla. Quindi vedremo... Il risultato è sconosciuto.

14. Otteniamo e impostiamo i colori per il testo e le basi degli elementi. Possiamo provare ad associare questi colori ad alcuni semplici eventi o confini di valori.

15. Vi spiegherò meglio come navigare e leggere la nuova stampa del file API.