Galleria di interfacce utente scritte in MQL - pagina 35

 
//--------------------------
//FIRST GROUP
//--------------------------
GROUP, "Group 1",

__, CHECKBOX, "Checkbox 100",  

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 10,
//--------------------------
i, CHECKBOXES, W, 120,  END,
//--------------------------
//--------------------------------------------------------------
//1. WRITE THE NAME OF THE CHECKBOX THAT WILL BLOCK THE OTHERS:
//2. WRITE KEYWORD "BLOCKS".
//3. WRITE THE NAMES OF THE ELEMENTS (OR GROUPS) IT WILL BLOCK.
//4. PUT "END" IN THE END.
//5. OR, WRITE THE NAME OF THEIR GROUP.
//--------------------------------------------------------------
"Checkbox 100", BLOCKS, "Group 2", END,
//--------------------------------------------------------------

//--------------------------
//SECOND GROUP
//--------------------------
GROUP, "Group 2",


__, H_SLIDER, "H_Slider 1", W, 120,       S_EDIT, "Textbox 1",         W, 120, 

__, C_LIST,   "Combobox 1", W, 120,       D_LIST, "Combobox 2",        W, 120, 

__, BUTTON,   "Button 1",   W,120,        D_BUTTON, "Dialog button 1", W, 120, 

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2H, "Checkbox 100", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 

//------------------------------------------------------
 
_Y2H 是什么,是否有 _X2H ?
 
hini #: _Y2H Что это такое, и есть ли это _X2H?

Analizziamo l'espressione _Y2H:

  • Y è una coordinata
  • 2 significa "a". Indica qualcosa.
  • H è l'abbreviazione di altezza.

Da Y ad altezza.

Nel sistema di coordinate, spostandosi dal punto Y dell'oggetto lungo il suo corpo a una distanza pari all'altezza dell'oggetto (y_size) si arriva al suo punto più basso. La coordinata Y dell'oggetto da snappare deve scendere lungo l'altezza dell'oggetto da snappare e finire alla sua base. Deve cioè coprire la distanza in altezza dell'oggetto di ancoraggio, per cui l'ancoraggio si chiama _Y2H.


2. _X2H non esiste perché la coordinata X può scattare solo sul piano orizzontale, non su quello verticale, e H sta per altezza. Esiste lo snap _X2W, che significa che la coordinata X viene snapata al punto X + X_SIZE (larghezza) dell'oggetto specificato.


L'argomento dello snap verrà discusso in dettaglio più avanti.

 

Oggi finiremo con le enumerazioni, visto che abbiamo iniziato a parlarne ieri.

 

Per quanto riguarda gli attacchi, aggiungo che ci sono regole precise e che non ha senso provare a sperimentare ora. Aspettate una spiegazione più completa.

Ci sono legami che funzionano separatamente per gruppi di elementi e altri che funzionano con singoli elementi all'interno di gruppi. Esistono anche binding adatti al posizionamento di oggetti all'interno di elementi (come testo o icone).

A questo ci penseremo più avanti.

 
Реter Konow #:

Oggi finiremo con le enumerazioni, visto che abbiamo iniziato a parlarne ieri.

Tuttavia, dopo aver riflettuto attentamente, ho deciso di rimandare il completamento dell'argomento delle enumerazioni. La comprensione del materiale ulteriore di questo argomento richiede una conoscenza di base delle regole linguistiche, che i lettori non hanno ancora.

Per ora, continuiamo a familiarizzare con i controlli e i binding.

 

Finora, nella maggior parte dei casi, abbiamo avuto a che fare con un semplice pulsante BUTTON. Tutti sanno cos'è un pulsante, si spiega da sé. Ma vale la pena di approfondire alcuni dettagli. Lo stesso vale per gli altri elementi con cui abbiamo lavorato in precedenza. Procediamo in questo modo: prima passiamo in rassegna le caratteristiche e le funzioni principali, accennando a tutto in termini generali, e poi ci soffermeremo su ogni elemento separatamente per una considerazione più dettagliata.

Un pulsante è un elemento interattivo che cambia stato quando viene premuto. In un'interfaccia grafica viene utilizzato per diversi scopi. Principalmente per accendere o spegnere qualcosa, ma a volte per richiamare una finestra. Le varianti di applicazione di un semplice pulsante sono molte. È un elemento abbastanza universale.

Quali altri elementi abbiamo considerato? Ad esempio, la casella di controllo. Perché è necessaria una casella di controllo? Una casella di controllo è necessaria per attivare, disattivare o bloccare le opzioni nelle impostazioni del programma. Se è necessario scegliere tra più opzioni, l'elemento R_BUTTON(pulsante di opzione) è adatto. Ma a condizione che le opzioni siano poche.

E se le opzioni sono molte, ma non eccessive? Allora si utilizza l'elenco a discesa D_LIST o l'elenco combinato C_LIST. La differenza tra questi due elementi è la presenza o meno di un campo di immissione di testo in cui l'utente può inserire la scelta desiderata. D_LIST ha un campo di questo tipo, C_LISTno.

E cosa fare quando ci sono troppe opzioni nel programma? Gli elenchi a discesa diventano scomodi a causa delle loro dimensioni ridotte. La soluzione è rappresentata da lunghi fogli scorrevoli in finestre di grandi dimensioni. Si possono vedere esempi nelle finestre font, suoni e cornici del designer.

Ma questi elenchi hanno bisogno di una barra di scorrimento, perché sono molto lunghi. Per questo esiste un elemento speciale. V_BOX"Campo visivo". Un elemento semplice con due barre di scorrimento e una tela propria. Tra l'altro, lo scorrimento è sia verticale che orizzontale. La dimensione della tela viene impostata automaticamente dal calcolo del contenuto inserito.

Gli elementi dell'elenco sono chiamati L_ITEM, abbreviazione di"List Item". Vengono raccolti in un gruppo separato e disegnati sulla tela del campo visivo specificato. Ogni elemento è chiamato con il nome di una voce di menu o di un'opzione e viene commutato con una parola chiave SWITCH_ALL. Per inserire l'elenco di voci L_ITEM nel campo visivo V_BOX, si usa la parola chiave"IN". Il posizionamento è semplice: LEFT_TOP, 0,0,.


Successivamente, esaminiamo gli elementi elencati in modo più dettagliato e nello stesso ordine. Parleremo di posizionamento, stati, proprietà e attributi.

...E considereremo le possibilità di applicazione nel contesto dei programmi dei trader.

 

Pulsante ordinario: BUTTON

4 varietà di pulsanti costruttori:

Ha un aspetto relativamente datato e funzionalità semplici, come qualsiasi pulsante classico. È presente un'icona.


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

  • Pulsante interattivo I_BUTTON - pulsante interattivo:

Un bel pulsante interattivo che risponde in modo fluido al passaggio del cursore o al suo allontanamento. Viene utilizzato come un normale pulsante, ma meno visibile e in stato neutro non ha bordi delineati. Per lo più senza testo e con un'icona. Più spesso di forma quadrata.


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

  • Pulsante della barra degli strumenti (come su MT4) TB_BUTTON - Pulsante della barra degli strumenti:

Utilizzato principalmente per la barra degli strumenti nell'intestazione della finestra principale. Spesso senza testo, ma con un'icona e solitamente di forma quadrata. Si attacca al cursore quando ci si passa sopra. Richiama finestre o funzioni. Ha una freccia.


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

  • D_BUTTON - pulsante di dialogo:

Si trova in fondo alle finestre di dialogo per interagire con l'utente. Porta testi come "Ok", "Sì", "No", "Annulla", "Annulla", "Continua", "Accetta", "Successivo", "Precedente", "Salta", "Conferma", "Apri", "Chiudi", .... e altre parole di questo genere.


È possibile impostare icone e testo su tutti i pulsanti, nonché il colore per i diversi stati.

Allo stesso tempo, i pulsanti possono cambiare testo e icona a seconda dello stato. In quello neutro il testo o l'icona sono uguali, mentre in quello attivato sono diversi.


Ad esempio:

Tutti i pulsanti sono premuti e si trovano in stato neutro:


Ora li abbiamo premuti e hanno cambiato testo e icona: (tranne il pulsante di dialogo, che chiude la finestra dopo essere stato premuto e non è necessario).


Il testo del pulsante interattivo è sovrapposto all'icona, ma è stato progettato in questo modo perché è possibile posizionare l'icona e il testo all'interno del pulsante.

 

Pertanto, i pulsanti possono cambiare testo quando vengono cliccati. Inoltre, il testo e il nome del pulsante sono cose diverse. Il testo per lo stato neutro può essere impostato con la parola N_TEXT e al posto del nome del pulsante apparirà un altro testo dell'utente.

Lo stesso vale per l'icona. È possibile specificare un'icona per lo stato neutro e per lo stato attivo.


Codice:

NEW_WINDOW,  
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "My first window",
//------------------------------------------------------
/*POINT TO WINDOW'S ICON*/  W_ICON, "::Images\\16x16\\Smile.bmp",  
//------------------------------------------------------

//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//----------------------------------------------------------------------------------
/*WINDOW OPENS AT START*/   OPEN_ON_INIT,  /*(OOI)*/

/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  

/*MARGINS OF THE WINDOW*/   MARGINS, 40,40,/*Х, Y*/
//----------------------------------------------------------------------------------
//
//----------------------------------------------------------------------------------
//1. DECLARE A GROUP WITH AN ABSTRACT NAME  A.
//2. DECLARE A NEW ROW OF ELEMENTS IN THE GROUP WITH A SYMBOL  __, 
//3. DECLARE A BUTTON AND WRITE IT'S NAME.
//4. END GROUP WITH THE KEYWORDS  END_GROUP,
//------------------------------------------------------
GROUP, "Buttons group",

__, BUTTON,   "Button 1", W, 120,_,H, 50,   D_BUTTON, "D button 1",   W, 120,_,H, 50,

__, I_BUTTON, "I Button", W, 120,_,H, 50,   TB_BUTTON, "TB button 1", W, 120,_,H, 50, 

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 
//----------------------------
"Button 1",    N_TEXT,  "Neutral state",

"Button 1",    A_TEXT,  "Active state",

"Button 1",    N_LABEL, "::Images\\16x16\\About.bmp",

"Button 1",    A_LABEL, "::Images\\16x16\\3d bar chart.bmp",

"Button 1",    FIC,
//----------------------------

//----------------------------
"I Button",    N_TEXT,  "Neutral", 

"I Button",    A_TEXT,  "Active",

"I Button",    N_LABEL, "::Images\\16x16\\Accounting.bmp",

"I Button",    A_LABEL, "::Images\\16x16\\Address book.bmp", 

"I Button",    FIC,
//----------------------------

//----------------------------
"D button 1",    N_TEXT,  "Also Neutral",

"D button 1",    A_TEXT,  "Also Active",

"D button 1",    N_LABEL, "::Images\\16x16\\Alarm clock.bmp",

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

//----------------------------
"TB button 1",    N_TEXT,  "TB Neutral",

"TB button 1",    A_TEXT,  "TB Active",

"TB button 1",    N_LABEL, "::Images\\16x16\\Alarm clock.bmp",

"TB button 1",    A_LABEL,  "::Images\\16x16\\Address book.bmp", 

"TB Button 1",    FIC,

//------------------------------------------------------
//FINISH THE WINDOW BY KEYWORDS END_WINDOW,
//------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------
 

Forse una delle funzioni principali dei pulsanti è quella di richiamare le finestre. Premendo il pulsante in una finestra se ne apre un'altra.

Come si fa?

In due modi:

  • Scriviamo la parola chiave OPENS_WINDOW nelle proprietà del pulsante e poi il nome della finestra da chiamare.
  • Oppure dare al pulsante lo stesso nome della finestra che deve chiamare e nascondere il testo del pulsante. Oppure sovrascrivere il testo del pulsante con le parole N_TEXT e A_TEXT.

È importante notare che l'abbinamento dei nomi dei pulsanti o delle voci di menu con i nomi delle finestre provoca l'apertura di queste ultime quando si fa clic su tali voci.

//+------------------------------------------------------------------+
//|                                              My first window.mqh |
//+------------------------------------------------------------------+
//DECLARE A NEW WINDOW
//----------------------------------------------------------------------------------
NEW_WINDOW, 
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "Just a window",
//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//------------------------------------------------------ 
/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  
//------------------------------------------------------

END_WINDOW,
//----------------------------------------------------------------------------------




//DECLARE A NEW WINDOW
//----------------------------------------------------------------------------------
NEW_WINDOW,  
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "My first window",
//------------------------------------------------------
/*POINT TO WINDOW'S ICON*/  W_ICON, "::Images\\16x16\\Smile.bmp",  
//------------------------------------------------------

//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//----------------------------------------------------------------------------------
/*WINDOW OPENS AT START*/   OPEN_ON_INIT,  /*(OOI)*/

/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  

/*MARGINS OF THE WINDOW*/   MARGINS, 40,40,/*Х, Y*/
//----------------------------------------------------------------------------------
//
//----------------------------------------------------------------------------------
//1. DECLARE A GROUP WITH AN ABSTRACT NAME  A.
//2. DECLARE A NEW ROW OF ELEMENTS IN THE GROUP WITH A SYMBOL  __, 
//3. DECLARE A BUTTON AND WRITE IT'S NAME.
//4. END GROUP WITH THE KEYWORDS  END_GROUP,
//------------------------------------------------------
GROUP, "Buttons group",

__, BUTTON,  "Just a window", W, 150, //the button WILL call the window due to sharing the same name.   

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 
//----------------------------
"Just a window",    N_TEXT,  "Press to open",//redefine text on the button

"Just a window",    N_LABEL, "::Images\\16x16\\Alarm clock.bmp",
//------------------------------------------------------
//FINISH THE WINDOW BY KEYWORDS END_WINDOW,
//------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------


E la seconda variante:

//+------------------------------------------------------------------+
//|                                              My first window.mqh |
//+------------------------------------------------------------------+
//DECLARE A NEW WINDOW
//----------------------------------------------------------------------------------
NEW_WINDOW, 
 
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "Just a window",
//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//------------------------------------------------------ 
/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  
//------------------------------------------------------

END_WINDOW,
//----------------------------------------------------------------------------------




//DECLARE A NEW WINDOW
//----------------------------------------------------------------------------------
NEW_WINDOW,  
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "My first window",
//------------------------------------------------------
/*POINT TO WINDOW'S ICON*/  W_ICON, "::Images\\16x16\\Smile.bmp",  
//------------------------------------------------------

//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//----------------------------------------------------------------------------------
/*WINDOW OPENS AT START*/   OPEN_ON_INIT,  /*(OOI)*/

/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  

/*MARGINS OF THE WINDOW*/   MARGINS, 40,40,/*Х, Y*/
//----------------------------------------------------------------------------------
//
//----------------------------------------------------------------------------------
//1. DECLARE A GROUP WITH AN ABSTRACT NAME  A.
//2. DECLARE A NEW ROW OF ELEMENTS IN THE GROUP WITH A SYMBOL  __, 
//3. DECLARE A BUTTON AND WRITE IT'S NAME.
//4. END GROUP WITH THE KEYWORDS  END_GROUP,
//------------------------------------------------------
GROUP, "Buttons group",

__, BUTTON,  "Press to open", W, 150,   

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 
//----------------------------
"Press to open", OPENS_WINDOW, "Just a window",//opens the window by the keyword 

"Press to open", N_LABEL, "::Images\\16x16\\Alarm clock.bmp",
//------------------------------------------------------
//FINISH THE WINDOW BY KEYWORDS END_WINDOW,
//------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------



Risultato: