Galleria di interfacce utente scritte in MQL - pagina 61

 
hini #:
Perché nel tester non chiama OnChartEvent.

È vero. Ma nella stessa situazione in MT4 c'erano possibili varianti. Ne ho implementata una con successo. L'interfaccia funzionava per un Expert Advisor in esecuzione nella modalità normale, ma poteva controllare la sua copia in esecuzione nel tester. La connessione è stata realizzata attraverso le risorse. L'EA sul grafico ha ricevuto tutti i dati durante il processo di test. Con MT5, forse, la situazione è più complicata. Non sono sicuro che sia possibile stabilire una "comunicazione" tra due copie tramite risorse. Questo problema richiede uno studio separato.

 
Passiamo all'argomento successivo:

4. navigare tra gli elenchi di proprietà dei singoli elementi.

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

Vi ricordo l'elenco degli argomenti da considerare:

1. Orientarsi nell'elenco di intellisense e selezionare la funzione della finestra giusta.

2. Apertura e chiusura programmatica delle finestre.

3. Orientarsi nell'elenco di intellisense e selezionare l'elemento giusto nella finestra giusta.

4. Navigare negli elenchi di 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.

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

Il colore giallo indica gli argomenti già trattati.

 
Analizziamo l'argomento punto per punto:

  • Il concetto di separazione delle proprietà in elenchi, in base alla "parentela" degli elementi, è stato implementato con successo.
  • Come risultato dell'implementazione, sono stati creati 7 elenchi di proprietà unici per tutti i tipi di elementi.
  • A ogni elenco viene assegnato un identificatore speciale. Si tratta del prefisso p (abbreviazione di property) e di un numero di serie.
  • Di conseguenza, ogni elenco può essere trovato in intellisense con sette prefissi: p1, p2, p3, p4, p5, p6 e p7.
  • Per comodità e per evitare confusione, i prefissi degli elenchi di proprietà sono impressi nei nomi delle funzioni wrapper:

  • Quando si inserisce il prefisso, appare un elenco di proprietà individuali. Ho sottolineato la parola "singole" di proposito, perché questo punto è di fondamentale importanza.
  • Per restituire e impostare i valori delle proprietà, le funzioni wrapper accettano nomi di proprietà SOLO con il prefisso scritto nel proprio nome:


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


  • Solo queste proprietà dell'elenco sono disponibili per la casella di controllo. Tuttavia, l'elenco stesso non appartiene solo alla casella di controllo, ma anche ad altri elementi.

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


  • L'elemento C_LIST non ha ancora proprietà speciali nella sua lista. Solo le azioni che possono essere eseguite dal wrapper (tranne la restituzione di V_LAST - l'ultimo valore).

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


  • A differenza di C_LIST, il cursore ha un ampio elenco di proprietà e azioni disponibili.

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


  • All'elemento S_EDIT appartiene un'ampia gamma di proprietà e azioni disponibili:


Enfasi aggiunta:

Ogni funzione wrapper accetta solo proprietà con il prefisso scritto nel suo nome.


Ecco come si presenta in pratica il lavoro con gli elenchi(mettere le parentesi alla fine, perché intellisense non funziona all'interno delle parentesi delle funzioni wrapper):

La gif è leggermente velocizzata.


Come risultato delle chiamate mostrate nella gif, le funzioni wrapper restituiscono i valori delle proprietà specificate.

Prima della chiamata, è necessario dichiarare una variabile per memorizzare il valore della proprietà o il risultato dell'esecuzione della funzione. Maggiori informazioni al riguardo sono contenute nei seguenti argomenti.

 

5.
Parsing del nome dell'elemento e funzione wrapper della finestra:


1. Nome della funzione wrapper dell'elemento:

Vediamo un esempio di funzione dell'elemento campo di inserimento testo EDIT: w7_s_p4_EDIT_Comment_1();

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

  • w7 - finestra numero 7

//-------------------------------------------------------------
  • s - Tipo di valore di ritorno di questa funzione wrapper string.

//-------------------------------------------------------------
  • p4 - Prefisso dell'elenco di proprietà di questo tipo di elemento.

/ / - ------------------------------------------------------------
  • EDIT - Tipo di elemento.

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

  • Comment_1 - Nome dell ' elemento specifico.

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


2. Il nome della funzione wrapper della finestra:

Vediamo un'altra funzione come esempio: w_15_Processing_the_data();

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

  • w_15 - finestra numero 15
Si noti che il numero non viene immediatamente dopo w, ma attraverso il trattino _. Questo è importante . Questo è importante.

) // - ------------------------------------------------------------
  • Elaborazione_dei_dati - Il nome di questa finestra (per le finestre di avviso il nome potrebbe non coincidere con Caption, il testo nell'intestazione della finestra).

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

Si noti che la funzione finestra non dispone ancora di un prefisso per aprire l'elenco delle proprietà. Questa funzione apparirà sicuramente. Verrà generato un elenco speciale di proprietà della finestra da restituire/impostare e verrà assegnato un prefisso. Inoltre, la funzione finestra non contiene ancora una lettera per il tipo di ritorno.

Per ora, la funzione può solo aprire o chiudere una finestra.


Questi difetti saranno risolti nella prossima versione.


 
Si raccomanda di riassumere queste informazioni di tutorial una volta in privato e separatamente, altrimenti si rischia di ingolfare i commenti in futuro.
 
hini #:
Si raccomanda di riassumere queste informazioni sulla formazione una volta sola, privatamente e separatamente, per evitare di ingolfare i commenti in futuro.
Naturalmente, queste informazioni saranno riassunte e ordinate come si deve.
 
Nel periodo attuale, l'ordine delle istruzioni, delle spiegazioni e dei commenti è in fase di formazione. Il contenuto della futura documentazione si accumula armoniosamente nel processo di sviluppo e di comunicazione con gli utenti. Di conseguenza, le informazioni di base sono presentate in parti. Ricevere feedback è necessario ed è una fase importante che aumenta la qualità delle soluzioni tecniche. Il software attraversa una fase formativa e sarà in grado di raggiungere la piena funzionalità grazie alla partecipazione attiva del pubblico. Il risultato sarà un programma completo con una documentazione dettagliata.
 

6.restituire il valore delparametro o della proprietà a una variabile del tipo richiesto:


Il tipo del parametro dell'elemento(int, double o string) determina il tipo della funzione dell'elemento.

È noto che le funzioni elemento restituiscono il valore del parametro con uno dei tre tipi: int, double o string.

Tuttavia, le funzioni restituiscono anche valori di proprietà...

Si verifica una situazione in cui il tipo del valore del parametro può non coincidere con il tipo delle proprietà, che sono sempre int. Si scopre che le funzioni restituiscono valori di proprietà del tipo sbagliato, ad esempio double o string invece di int. Questo inconveniente forzato è il prezzo per l'universalità delle funzioni.

Il compito dell'utente è quello di convertire da solo il valore ricevuto nel tipo richiesto..


Sottolineo: il tipo principale di tutte le proprietà degli elementi è int.


Diamo un'occhiata più da vicino agli esempi di domande e risposte:

  • - D: Come farà la funzione a restituire il valore di una proprietà di tipo int se il tipo della funzione è string?
  • - Risposta: La funzione restituirà il valore di int con il tipo stringa.
  • - Domanda: Come farà la funzione a restituire il valore diint se il tipo di funzione è double?
  • - Risposta: La funzione restituirà il valore di int con il tipo double.
  • - Domanda: Come fa la funzione a restituire il valore double se il tipo di funzione è int?
  • - Risposta: Le proprietà degli elementi di tipo double non esistono. Le proprietà del parametro dell'elemento possono essere di tipo double. In questo caso, la funzione stessa sarà di tipo double.


Il tipo del valore del parametro determina il tipo della funzione dell'elemento.

Non esistono proprietà di un elemento di tipo double. Solo int. Esistono però proprietà dei parametri che accettano i tipi double, string o int. Ad esempio, V_CURRENT, V_LAST, V_MAX, V_MIN, V_STEP possono essere sia int che double. In entrambi i casi, anche la funzione elemento diventerà int o double, ma la funzione non può diventare int se le proprietà del parametro o il parametro stesso non sono int.

Se la funzione cursore restituisce il tipo int, significa che nella fase di creazione dell'elemento l'utente ha assegnato dei numeri interi al suo parametro o alle sue proprietà, ad esempio posizionando l'intervallo del cursore o i campi di input con i pulsanti all'interno di valori interi.



Conclusione: il compito dell'utente è quello di convertire i valori ricevuti nel tipo richiesto.

Consideriamo alcuni esempi pratici:

1.

   //------------------------------------------------
   //Текстовое поле ввода EDIT. Тип функции - string.
   //Получение и установка цвета текста и основания:
   //------------------------------------------------
   
   //1. Устанавливаем любой текст в пустое поле ввода:
   w7_s_p4_EDIT_Comment_1("Some random text");
   //------------------------------------------------

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

2.

   //------------------------------------------------
   //2. Получаем цвет основания поля ввода:
   uint Comment_1_base_color =  (uint)w7_s_p4_EDIT_Comment_1(get_s,p4_COLOR_base); 
   //------------------------------------------------
   //Выводим результат в журнал:
   Print("Comment_1_base_color  ",Comment_1_base_color);
   //------------------------------------------------

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

3.

   //------------------------------------------------
   //3. Назначаем основанию новый цвет:
   w7_s_p4_EDIT_Comment_1((uint)clrWheat,p4_COLOR_base); 
   //------------------------------------------------

Vedere il risultato:


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

4.

   //------------------------------------------------
   //4. Получаем цвет текста поля ввода: 
   uint Comment_1_text_color =  (uint)w7_s_p4_EDIT_Comment_1(get_s,p4_COLOR_text); 
   //------------------------------------------------
   //Выводим результат в журнал:
   Print("Comment_1_text_color  ",Comment_1_text_color); 
   //------------------------------------------------


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

5.

   //------------------------------------------------
   //5. Устанавливаем другой цвет тексту:
   w7_s_p4_EDIT_Comment_1((uint)clrRed,p4_COLOR_text); 
   //------------------------------------------------

Vedere il risultato:




Proviamo quindi a ottenere e impostare altre proprietà di elementi e parametri. Proviamo anche a lavorare con il tipo double.

Документация по MQL5: Основы языка / Операторы / Оператор возврата return
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
  • www.mql5.com
Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Результат вычисления выражения возвращается...
 

Ho seguito il codice e l'ho testato, e ho trovato un imprevisto che non si nasconde automaticamente quando la lunghezza della stringa casuale è troppo lunga

w7_s_p4_EDIT_Comment_1("Some random text AAAAAAAA");


 
Questi sono problemi minori, per favore lasciali per dopo e vedi cosa succede, se hai tempo controllali, altrimenti non risolverli per ora!