English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
Controlli Grafici Personalizzati. Parte 2. Libreria di Controllo

Controlli Grafici Personalizzati. Parte 2. Libreria di Controllo

MetaTrader 5Esempi | 9 dicembre 2021, 14:14
103 0
Dmitry Fedoseev
Dmitry Fedoseev

Introduzione

L'articolo "Controlli Grafici Personalizzati. Parte 1. Creare un Controllo Semplice" stabilisce i principi della creazione di controlli grafici in base ai quali l'insieme dei controlli è stato creato per gestire i principali problemi che sorgono nell'interazione tra un programma (Expert Advisor, script, indicatore) e un utente.

Alcuni controlli corrispondono quasi completamente a noti controlli standard, altri sono stati sviluppati tenendo in debita considerazione le caratteristiche e le capacità del Terminale. Tutti i controlli sono progettati come classi separate e aggiunti al file IncGUI.mqh utilizzato nell'articolo precedente (il nuovo nome del file è IncGUI_v2.mqh).

Oltre alle nuove classi di controllo aggiunte, il file ha ulteriori modifiche: La classe CGraphicObjectShell è stata modificata aggiungendo metodi per l'impostazione simultanea delle coordinate e delle dimensioni SetXYDistance(), SetXYSize() e correggendo un errore di battitura nella parola Distance in alcuni nomi di metodo (era scritto Distanse).

Nella classe CInputBox, è stato corretto un errore di digitazione nel nome del metodo SetValueString() (era scritto SetValueStrind) e sono stati aggiunti i metodi SetReadOnly() e ReadOnly(). Il metodo SetReadOnly() abilita/disabilita l'inserimento da tastiera nella casella di testo, mentre il metodo ReadOnly() consente di scoprire se l'inserimento da tastiera è consentito o meno.

L'ordine dei campioni di colore visualizzati utilizzando il metodo Show() è stato modificato nella classe CColorSchemes; gli schemi di colori ora hanno un po' più di colori del previsto; quindi, gli schemi sono disposti verticalmente e i colori sono disposti orizzontalmente. Inoltre, sono stati aggiunti alcuni nuovi schemi di colori alla classe CColorSchemes.

Questo articolo fornisce una libreria contenente i seguenti controlli:

  1. CInputBox (Casella di Inserimento),
  2. CSpinInputBox (Casella di Input del Pulsante di Spin),
  3. CCheckBox (Checkbox),
  4. CRadioGroup (Gruppo Pulsanti di Opzione),
  5. CVSсrollBar (Barra di Scorrimento Verticale),
  6. CHSсrollBar (Barra di Scorrimento Orizzontale),
  7. CList (Elenco),
  8. CListMS (Elenco a Selezione Multipla),
  9. CComBox (Elenco a Tendina),
  10. CHMenu (Menu Orizzontale),
  11. CVMenu (Menu Verticale),
  12. CHProgress (Barra di Avanzamento Orizzontale),
  13. CDialer (Dialer),
  14. CDialerInputBox (Dialer con Input Box),
  15. CTable (Tabella).

Diamo un'occhiata a ogni controllo con esempi di utilizzo (ad eccezione di CInputBox poiché una recensione abbastanza dettagliata è stata fornita nell'articolo "Controlli grafici personalizzati. Parte 1. Creazione di un Controllo Semplice").


1. CSpinInputBox Class

Casella di Input del Pulsante di Spin (Fig. 1).

Fig. 1. Classe CSpinInputBox (Casella di Input del Pulsante di Spin)

Fig. 1. Classe CSpinInputBox (Casella di input del pulsante di Spin )

Cliccando sul pulsante "+", il valore nella casella di testo viene aumentato di un valore impostato, allo stesso modo, facendo click sul pulsante "-" lo stesso viene diminuito.

Oltre a modificare i valori tramite i pulsanti di spin, è possibile abilitare l'input da tastiera nella casella di testo (metodo SetReadOnly()). Questo controllo si basa sul CInputBox che lavora in modalità numerica e ha metodi simili per impostare i limiti del valore: SetMaxValue(), SetMinValue().

A differenza del CInputBox, quando si chiama il metodo Init() nella classe CSpinInputBox, invece del parametro Digits viene trasmesso il parametro Change che rappresenta la variazione del valore da parte dei pulsanti di spin. Il valore del parametro Change definisce il numero di posizioni decimali in base alle quali viene formattato il valore nella casella di testo. È possibile effettuare le impostazioni a livello di codice e ottenere il valore utilizzando i metodi SetValue() e Value(). Il numero di posizioni decimali in base alle quali viene formattato il valore può essere ricevuto utilizzando il metodo Digits().

Un esempio di utilizzo di questo controllo è fornito nel file allegato eIncGUI_v2_Test_CSpinInputBox.mq5.


2. Classe CCheckBox

CheckBox o Switch On-Off (Fig. 2).

Fig. 2. Classe CCheckBox (Checkbox o Switch On-Off)

Fig. 2. Classe CCheckBox (Checkbox o Switch On-Off)

È un controllo abbastanza semplice che può assumere uno dei due valori: on o off. Nello stato "off" rappresenta un quadrato. Nello stato "on" appare un tick nel quadrato. È possibile modificare le impostazioni a livello di codice ed ottenere il valore utilizzando i metodi SetValue() e Value().

Un esempio di utilizzo di questo controllo è fornito nel file allegato eIncGUI_v2_Test_CCheckBox.mq5.


3. Classe CRadioGroup

Gruppo Pulsanti di Opzione (Fig. 3).

Fig. 3. Classe CRadioGroup (Gruppo Pulsanti di Opzione)

Fig. 3. Classe CRadioGroup (Gruppo Pulsanti di Opzione)

Il Gruppo Pulsanti di Opzione è progettato per la scelta di una delle diverse opzioni (ad esempio, la scelta del tipo di ordine). Questo controllo viene utilizzato allo stesso modo degli altri controlli: prima viene chiamato il metodo Init() con la specifica del nome del gruppo nei parametri, poi vengono creati i pulsanti. La creazione dei pulsanti viene effettuata utilizzando il metodo AddButton().

Il primo parametro del metodo AddButton() definisce la didascalia situata a destra del pulsante, seguita dalle coordinate X e Y relative alle coordinate dell'intero controllo.

Pertanto, i pulsanti nel gruppo possono essere disposti in qualsiasi ordine (non solo orizzontale o verticale) e l'intero gruppo di pulsanti può essere spostato modificando le coordinate del gruppo senza ricalcolare le coordinate dei singoli pulsanti. Il metodo AddButton() dovrebbe essere chiamato tante volte quanti sono i pulsanti in un gruppo che vuoi creare.

Dopo aver creato i pulsanti, un pulsante selezionato dovrebbe essere specificato dal metodo SetValue() che ha un solo parametro che indica l'indice del pulsante selezionato; i pulsanti sono numerati da zero in poi nell'ordine in cui sono stati creati dal metodo AddButton(). Per ottenere l'indice di un pulsante selezionato, viene utilizzato il metodo Value().

Un esempio di utilizzo di questo controllo è fornito nel file allegato eIncGUI_v2_Test_CRadioGroup.mq5.


4. Classe CVSсrollBar

Barra di Scorrimento Verticale (Fig. 4).

Fig. 4. Classe CVScrollBar (Barra di Scorrimento Verticale)

Fig. 4. Classe CVSсrollBar (Barra di Scorrimento Verticale)

Questo è un controllo ben noto e comunemente usato. La barra di scorrimento verticale ha le sue proprietà: valore minimo, valore massimo (che definisce l'intervallo valido dei valori di controllo), modifica minore (modifica del valore quando si clicca sul pulsante di scorrimento verso su o verso giù), modifica maggiore (modifica del valore quando si fa click sull'area tra il pulsante di scorrimento e la casella di scorrimento).

Oltre alle modifiche del valore con una modifica minore quando si fa click sui pulsanti di scorrimento e una modifica maggiore quando si fa click sull'area tra la casella di scorrimento e i pulsanti di scorrimento, è anche possibile spostare la casella di scorrimento in una determinata posizione. Per spostare la casella di scorrimento in una determinata posizione, è necessario fare click sulla casella di scorrimento in modo che venga selezionata (il colore cambierà) e quindi fare click sul punto richiesto - la casella di scorrimento salterà alla posizione indicata e verrà deselezionata.

Se la casella di scorrimento è stata selezionata per errore, è necessario fare nuovamente click su di essa per deselezionarla. Se si fa click su uno dei pulsanti di scorrimento mentre è selezionata la casella di scorrimento, quest'ultima salterà rispettivamente all'inizio o alla fine e il controllo otterrà il valore massimo o minimo.

L'applicazione di controllo inizia chiamando il metodo Init() previa specifica di nome, altezza e dimensione condizionale (da 1 a 4) nei parametri.

L'intervallo di valori viene quindi definito dai metodi SetMin(), SetMax() e un valore di modifica minore e un valore di modifica maggiore vengono impostati rispettivamente dai metodi SetSmallChange() e SetLargeChange(). Il valore di controllo (posizione della casella di scorrimento) viene ricevuto utilizzando il metodo Value().

La posizione della casella di scorrimento può essere modificata a livello di codice utilizzando il metodo SetValue().

Un esempio di utilizzo di questo controllo è fornito nel file allegato eIncGUI_v2_Test_CVSсrollBar.mq5.


5. Classe CHSсrollBar

Barra di Scorrimento Orizzontale (Fig. 5).

Fig. 5. Classe CHSсrollBar (Barra di Scorrimento Orizzontale)

Fig. 5. Classe CHSсrollBar (Barra di Scorrimento Orizzontale)

Questo controllo è assolutamente identico alla barra di scorrimento verticale, tranne per il fatto che quando si chiama il metodo Init() il secondo parametro da specificare è la larghezza della barra anziché l'altezza della barra.

Un esempio di utilizzo di questo controllo è fornito nel file allegato eIncGUI_v2_Test_CHSсrollBar.mq5.


6. Classe Clist

Elenco (Fig. 6).

Fig. 6. Classe CList (Lista)

Fig. 6. Classe CList (Lista)

Questo controllo rappresenta alcune caselle di testo che visualizzano gli elementi dell'elenco. Il numero di caselle visibili viene definito all'inizializzazione del controllo. Se il numero delle voci dell'elenco supera il numero di caselle visibili, apparirà la barra di scorrimento verticale.

È possibile selezionare una delle voci dell'elenco (elemento colore in Fig. 6). Per quanto riguarda la selezione dell'elemento, il controllo può operare in due modalità: consentire o meno la deselezione dell'elemento, per cui tali modalità sono impostate dal metodo SetAllowDeselect().

Il nome del controllo, la sua larghezza in pixel e l'altezza nel numero di elementi vengono trasmessi quando si chiama il metodo Init().

Seguendo il metodo Init(), viene utilizzato il metodo AddItem() per aggiungere un nuovo elemento all'elenco. Quindi, se richiesto, un elemento selezionato viene impostato dal metodo SetSelectedIndex(). Un elemento può sempre essere deselezionato a livello di codice trasmettendo un valore di -1 al metodo SetSelectedIndex().

Un elemento selezionato può essere identificato dal metodo SelectedIndex(); se il metodo restituisce -1, non è presente alcun elemento selezionato nell'elenco. Inoltre, il testo di un elemento selezionato può essere ricevuto utilizzando il metodo SelectedText().

Per ricevere il testo di qualsiasi elemento dell'elenco, viene utilizzato il metodo Text() con la specifica dell'indice dell'elemento. Qualsiasi testo di elemento può essere modificato utilizzando il metodo SetText(); Il metodo DeleteItem() elimina l'elemento, il metodo Clear() cancella l'intero elenco.

Un esempio di utilizzo di questo controllo viene fornito nel file allegato eIncGUI_v2_Test_CList.mq5.


7. Classe CListMS

Elenco a Selezione Multipla (Fig. 7).

Fig. 7. Classe CListMS (Elenco a Selezione Multipla)

Fig. 7. Classe CListMS (Elenco a Selezione Multipla)

Questo controllo è identico al controllo "Elenco" con un'eccezione: è consentita l'esistenza simultanea di più elementi selezionati. Di conseguenza, viene utilizzato un modo leggermente diverso di accedere agli elementi selezionati.

Quando si tratta della lista semplice, il metodo SetSelected() riceve un parametro che indica l'indice dell'elemento selezionato (al momento della selezione del nuovo elemento, l'elemento precedente viene deselezionato); nell'elenco a selezione multipla, vengono trasmessi al metodo SetSelected() due parametri: indice e stato dell'elemento (vero/falso - selezionato/non selezionato). Per verificare se l'elemento è selezionato, viene utilizzato il metodo Selected() che riceve l'indice trasmesso dell'elemento in controllo.

I metodi FirstSelected() e NextSelected() vengono utilizzati per gestire tutti gli elementi selezionati. Il metodo FirstSelected() restituisce l'indice della prima voce di elenco selezionata; il metodo NextSelected() restituisce l'indice dell'elemento selezionato successivo dopo l'indice dell'elemento ricevuto all'ultima chiamata dei metodi FirstSelected() o NextSelected().

La seguente struttura può essere utilizzata per scorrere tutti gli elementi selezionati:

// All selected items iteration
 
int Selected=lstm.FirstSelected();
    while(Selected!=-1){
        //=======================================
        // An action with the selected item        
        // ======================================
       Selected=lstm.NextSelected();
   } 

Un esempio di utilizzo di questo controllo è fornito nel file allegato eIncGUI_v2_Test_CListMS.mq5.


8. Classe CComBox

Elenco a tendina (Fig. 8.1).

Fig. 8.1. Classe CComBox (Elenco a Tendina)

Fig. 8.1. Classe CComBox (Elenco a Tendina)

Questo controllo rappresenta una casella di testo con un piccolo pulsante che deve essere cliccato per visualizzare l'elenco a tendina (Fig. 8.2). Il controllo "Elenco" viene utilizzato per visualizzare l'elenco. Il testo dell'elemento selezionato nell'elenco viene visualizzato nella casella di testo visibile.

Questo controllo può essere utilizzato in due modalità: la prima consente solo la selezione dall'elenco, la seconda consente l'input da tastiera (la modalità è impostata dal metodo SetReadOnly()). Pertanto, esistono alcune differenze tra questo controllo e l'elenco.

Se il valore inserito utilizzando la tastiera è nell'elenco, verrà selezionato l'elemento dell'elenco corrispondente e il metodo SelectedIndex() restituirà l'indice di questo elemento.

Se il valore inserito non può essere trovato nell'elenco, il metodo SelectedIndex() restituirà -1, quindi per ricevere il valore di questo controllo viene utilizzato il metodo Value() che restituisce il contenuto della casella di testo visibile: quindi, per impostare il valore a livello di codice si può utilizzare sia il metodo SetSelectedIndex() (identico al click sulla voce) sia il metodo SetValue() (identico all'inserimento di un valore da tastiera).

Figura 8.2. Elenco a Tendina Espanso

Fig. 8.2. Elenco a Tendina Espanso

Un esempio di utilizzo di questo controllo è fornito nel file allegato eIncGUI_v2_Test_CComBox.mq5.


9. Classe CHMenu

Menu Orizzontale (Fig. 9.1).

Figura 9.1. CHMenu (Menu Orizzontale)

Fig. 9.1. CHMenu (Menu Orizzontale)

Questo controllo rappresenta diverse caselle di testo che sono le voci di menu disposte in una riga orizzontale e i pulsanti ai lati. I pulsanti laterali caratterizzati da una linea verticale vengono utilizzati per scorrere il menu fino all'inizio o alla fine ei pulsanti freccia vengono utilizzati per scorrere una "schermata" (in base al numero di elementi visibili). Lo scopo principale del menu è l'esecuzione di azioni nel programma.

Quando si clicca sulla voce di menu, viene generato un evento in base al quale deve essere eseguito un comando. Attraverso il menu, oltre all'esecuzione diretta dei comandi, è possibile abilitare/disabilitare eventuali strumenti.

Ad esempio, l'Expert Advisor ha alcune opzioni per chiudere una posizione: utilizzando gli indicatori 1, 2 e 3. Un utente può abilitare una o tutte le opzioni o qualsiasi combinazione di due strumenti per chiudere la posizione utilizzando l'indicatore che per primo segnala la chiusura.

Si suggerisce il seguente schema: cliccando sul menu, compare una finestra per l'impostazione dei parametri dello strumento e l'abilitazione dello strumento, quindi l'utente imposta i parametri, abilita lo strumento e clicca "Ok" - e lo strumento inizia a funzionare.

Per vedere chiaramente quali strumenti stanno attualmente funzionando, esiste un metodo per contrassegnare l'elemento (il segno di spunta) - il metodo SetChecked(). Se il menu contiene le voci selezionate, cambia il colore per chiarire che ci sono strumenti abilitati nel menu anche se la voce abilitata viene fatta scorrere fuori dalla vista. È possibile identificare qualsiasi elemento selezionato a livello di codice utilizzando il metodo CheckedExist() e verificare se una determinata voce di menu viene verificata utilizzando il metodo Checked().

Figura 9.2. Menu Orizzontale con una Voce Selezionata

Fig. 9.2. Menu Orizzontale con un Elemento Selezionato

L'applicazione di questo controllo, così come di tutti gli altri controlli, inizia con il metodo Init() a cui vengono trasmessi il nome del controllo, la sua larghezza in pixel e il numero di elementi visibili. Il metodo AddItem() che segue il metodo Init() viene utilizzato per aggiungere elementi.

Poiché questo controllo implica la visualizzazione di altri controlli in risposta ai suoi comandi, dispone di metodi per ottenere le coordinate della voce di menu su cui si è fatto click, un metodo per ottenere un quarto di schermo in cui si trova l'elemento e un metodo per ottenere l'ordine della larghezza dell'elemento per posizionare il controllo visualizzato in un quarto dello schermo adatto.

I metodi LastClickedX() e LastClickedY() vengono utilizzati per ottenere le coordinate, il metodo LastClickedQuarter() viene utilizzato per ottenere il trimestre (valore 1 - angolo in alto a sinistra, 2 - angolo in alto a destra, 3 - angolo in basso a sinistra, 4 - angolo in basso nell'angolo destro), il metodo LastClickedW() ottiene la larghezza dell'elemento.

Un esempio di utilizzo di questo controllo viene fornito nel file allegato eIncGUI_v2_Test_CHMenu.mq5.


10. Classe CVMenu

Menu Verticale (Fig. 10).

Fig. 10. Classe CVMenu (Menu Verticale)

Fig. 10. Classe CVMenu (Menu Verticale)

Questo controllo è completamente identico al menu orizzontale in termini di scopo, funzionalità e utilizzo, tranne per il fatto che i suoi elementi sono disposti verticalmente e una barra di scorrimento verticale viene utilizzata per scorrere. C'è tuttavia una differenza: invece del metodo LastClickedW() utilizzato nel menu orizzontale per ottenere la larghezza dell'elemento, qui viene utilizzato il metodo ItemHeight() per definire l'altezza dell'elemento.

Un esempio di utilizzo di questo controllo è fornito nel file allegato eIncGUI_v2_Test_CVMenu.mq5.


11. Classe CHProgress

Barra di Avanzamento Orizzontale (Fig. 11).

Fig. 11. Classe CHProgress (Barra di Avanzamento Orizzontale)

Fig. 11. CHProgress (Barra di Avanzamento Orizzontale)

Questo controllo è progettato per controllare l'avanzamento di un'attività in un formato percentuale. Ad esempio, è necessario eseguire alcuni calcoli complessi che richiedono tempo per ogni barra sul grafico per la ricerca. Sarà interessante sapere fino a che punto l'attività è stata eseguita, il tempo rimanente fino alla fine della performance per pianificare in anticipo il tuo tempo o almeno sapere che il programma è ancora in esecuzione e non si è bloccato. La parte sinistra della barra di avanzamento mostra la percentuale delle prestazioni, la parte destra mostra il tempo stimato per il completamento.

Quando si chiama il metodo Init(), vengono trasmessi due parametri: nome e larghezza in pixel. Subito prima di entrare nel ciclo controllato, è necessario chiamare il metodo Begin() che riceve i parametri del ciclo: valore minimo e valore massimo. All'interno del ciclo, il metodo SetValue() imposta il valore visualizzato dalla barra di avanzamento. All'uscita dal ciclo il metodo Reset() riporta la barra di avanzamento alla sua forma originale.

Ogni chiamata del metodo SetValue() richiama il ridisegno degli oggetti grafici in modo che l'uso della barra di avanzamento possa diventare il principale consumatore di risorse del computer aumentando significativamente il tempo di esecuzione del ciclo fino al punto in cui l'uso della barra di avanzamento diventa inefficiente. E per questo caso il controllo ha il metodo SetRefreshInterval() a cui viene trasmesso il valore dell'intervallo di aggiornamento in secondi.

Quando l'intervallo di aggiornamento è stato impostato, il metodo SetValue() ad ogni chiamata controllerà prima l'ora dell'ultimo aggiornamento del controllo e solo nel caso in cui tale tempo superi l'intervallo impostato, verrà eseguito il calcolo e la barra di avanzamento verrà ridisegnato.

Un esempio di utilizzo di questo controllo è fornito nel file allegato eIncGUI_v2_Test_CHProgress.mq5.


12. Classe CDialer

Dialer (Fig. 12).

Fig. 12. Classe CDialer (Dialer)

Fig. 12. Classe CDialer (Dialer)

Questo controllo è destinato all'uso all'interno della classe CDialerInputBox, ma può anche essere utilizzato in modo indipendente.

Ad esempio, il controllo diventa visibile premendo qualsiasi pulsante; l'utente compone un valore, preme "OK" e il programma utilizza quindi il valore ricevuto dal metodo Value() che è sostanzialmente ciò che viene fatto nel controllo Dialer With Input Box, dove l'ultimo valore inserito viene sempre visualizzato nella casella di testo accanto al quale si trova il pulsante per espandere il dialer.

Un parametro, il nome, viene trasmesso al metodo Init().

Pulsanti: "X" - chiude il dialer senza modificare il valore, "C" - ripristina il valore inserito, "OK" - utilizza il valore inserito, l'uso dei tasti numerici è ovvio, punto decimale - inserisce la parte decimale di un numero, Pulsante "-" - cambia il segno di un numero (positivo/negativo). I numeri inseriti vengono visualizzati nella casella di testo nella parte inferiore del dialer.

Un esempio di utilizzo di questo controllo viene fornito nel file allegato eIncGUI_v2_Test_CDialer.mq5.


13. Classe CDialerInputBox

Dialer con Casella Input (Fig. 13).

Fig. 13. Classe CDialerInputBox (Dialer con Input Box)

Fig. 13. Classe CDialerInputBox (Dialer con Casella di Inserimento)

Questo controllo si basa sui controlli Input Box e Dialer e rappresenta una casella di testo con un pulsante per espandere il dialer che si trova accanto ad esso. Il controllo può funzionare in due modalità: inserimento solo tramite dialer e in aggiunta ad esso l'inserimento da tastiera.

Il metodo SetReadOnly() abilita/disabilita l'input da tastiera.

Al metodo Init() vengono trasmessi quattro parametri: il nome, la larghezza in pixel, il numero di cifre decimali secondo cui verrà formattato il valore per la visualizzazione e la didascalia visualizzata accanto al controllo.

Un esempio di utilizzo di questo controllo è fornito nel file allegato eIncGUI_v2_Test_CDialerInputBox.mq5.


14. Classe CTable

Tabella (Fig. 14).

Fig. 14. Classe CTable (Tabella)

Fig. 14. Classe CTable (Tabella)

Il nome del controllo parla da solo: è progettato per visualizzare tabelle di dati.

Al metodo Init() vengono trasmessi tre parametri: il nome, la larghezza e l'altezza in pixel. La dimensione effettiva della tabella è definita dal numero di righe, colonne e dalle loro dimensioni, ma non può superare i valori di dimensione specificati nella chiamata Init(). Se la dimensione effettiva della tabella supera i valori di dimensione specificati nella chiamata Init(), vengono mostrate le barre di scorrimento.

Utilizzo. Dopo l'inizializzazione della tabella da parte del metodo Init(), il numero di colonne della tabella è definito dal metodo SetCollsCount() e il numero di righe è definito dal metodo SetRowsCount(). Invece del metodo SetRowsCount(), è possibile utilizzare il metodo AddRow(); ogni volta che viene chiamato viene aggiunta una riga alla tabella. Dopo aver definito la dimensione della tabella (numero di colonne e righe), le celle possono essere riempite con i valori.

Il metodo SetCellText() viene utilizzato per compilare i valori delle celle. Oltre al testo della cella, è possibile modificare anche tutte le altre proprietà della cella: colore di sfondo, colore del testo, dimensione del carattere, tipo di carattere (metodo SetCellBGColor(), SetCellTxtColor(), SetCellFontSize(), SetCellFont()). L'altezza della riga può essere modificata utilizzando il metodo SetRowHeight(), la larghezza della colonna può essere modificata dal metodo SetCollWidth().

Il metodo SetCellsMerge() viene utilizzato per unire più celle in una e dispone di quattro parametri: indice di riga, indice di colonna, parametri RowSpan e CollSpan (simili agli attributi RowSpan e CollSpan in HTML).

Il parametro RowSpan definisce il numero di celle unite verticalmente e il parametro CollSpan definisce il numero di celle unite orizzontalmente. Le celle unite possono essere ripristinate impostando i valori RowSpan e CollSpan uguali a 1.

Per comodità di visualizzazione, la tabella ha una funzione di crosshair. Quando si clicca su una cella, la colonna e la riga di tale cella vengono evidenziate con un colore diverso. Con un altro click, sulla stessa riga torna un colore standard della tabella (così come il colore standard della barra di scorrimento). La funzione crosshair è abilitata/disabilitata dal metodo SetAllowSelection(). I metodi LastClickedRow() e LastClickedColl() aiutano a identificare la cella su cui è stato fatto click.

Il metodo HTML() viene utilizzato per ottenere un codice HTML della tabella da salvare nel file html per un'ulteriore visualizzazione nel browser. Tuttavia, questo metodo può essere utilizzato anche senza dover visualizzare il controllo ma semplicemente per ottenere un codice html della tabella.

Un esempio di utilizzo di questo controllo è fornito nel file allegato eIncGUI_v2_Test_CTable.mq5.


Conclusione

L'insieme di controlli esaminati in questo articolo probabilmente non fornirà soluzioni a tutti i problemi che sorgono nell'interazione tra un programma e un utente, ma coprirà comunque completamente i più comuni:

  • Abilitazione/disabilitazione tramite checkbox;
  • Selezione di diverse opzioni utilizzando i pulsanti di opzione e le liste;
  • Alcune opzioni per un inserimento rapido e facile dei valori (inserimento da tastiera, inserimento da pulsante di spin, inserimento da dialer);
  • Mezzi di rappresentazione visiva dei dati - ancora, gli elenchi e la tabella.

Nei casi in cui questi controlli possono essere insufficienti, alcuni di essi possono essere utilizzati come componenti per lo sviluppo di altri controlli che sarebbero più adeguati al problema in questione. Comunque, spero che i controlli forniti saranno di grande utilità.


Appendice

Elenco dei File Allegati:

  1. IncGUI_v2.mqh è un file di inclusione con le classi CGraphicObjectShell, CWorkPiece, CColorSchemes, CInputBox e tutte le classi di controllo descritte in questo articolo. Il file deve essere posizionato nella cartella MQL5/Include della Cartella Terminal Data.
  2. eIncGUI_v2_Test_CSpinInputBox.mq5 -un esempio di utilizzo della classe CSpinInputBox. Questo e tutti i file successivi (da 2 a 16) dovrebbero essere inseriti nella cartella MQL5/Experts.
  3. eIncGUI_v2_Test_CCheckBox.mq5 - n esempio di utilizzo della classe CCheckBox.
  4. eIncGUI_v2_Test_CRadioGroup.mq5 - un esempio di utilizzo della classe CRadioGroup.
  5. eIncGUI_v2_Test_CVSсrollBar.mq5 - un esempio di utilizzo della classe CVSсrollBar.
  6. eIncGUI_v2_Test_CHSсrollBar.mq5 - un esempio di utilizzo della classe CHSсrollBar.
  7. eIncGUI_v2_Test_CList.mq5 - un esempio di utilizzo della classe CList.
  8. eIncGUI_v2_Test_CListMS.mq5 - un esempio di utilizzo della classe CListMS.
  9. eIncGUI_v2_Test_CComBox.mq5 - un esempio di utilizzo della classe CComBox.
  10. eIncGUI_v2_Test_CHMenu.mq5 - un esempio di utilizzo della classe CHMenu.
  11. eIncGUI_v2_Test_CVMenu.mq5 - un esempio di utilizzo della classe CVMenu.
  12. eIncGUI_v2_Test_CHProgress.mq5 - un esempio di utilizzo della classe CHProgress.
  13. eIncGUI_v2_Test_CDialer.mq5 - un esempio di utilizzo della classe CDialer.
  14. eIncGUI_v2_Test_CDialerInputBox.mq5 - un esempio di utilizzo della classe CDialerInputBox.
  15. eIncGUI_v2_Test_CTable.mq5 - un esempio di utilizzo dell'elemento della classe CTable.
  16. eIncGUI_v2_Test_All prevede la creazione di tutti i controlli in un Expert Advisor.

Tradotto dal russo da MetaQuotes Ltd.
Articolo originale: https://www.mql5.com/ru/articles/313

Controlli Grafici Personalizzati. Parte 3. Moduli Controlli Grafici Personalizzati. Parte 3. Moduli
Questo è l'ultimo dei tre articoli dedicati ai controlli grafici. Esso tratta la creazione del componente principale dell'interfaccia grafica - il modulo - e il suo utilizzo in combinazione con altri controlli. Oltre alle classi form, alla libreria di controllo sono state aggiunte le classi CFrame, CButton, CLabel.
Controlli Grafici Personalizzati. Parte 1: Creazione di un Controllo Semplice Controlli Grafici Personalizzati. Parte 1: Creazione di un Controllo Semplice
Questo articolo tratta i principi generali di sviluppo dei controlli grafici. Prepariamo strumenti per un lavoro rapido e conveniente con oggetti grafici, analizzeremo un esempio di creazione di un semplice controllo per l'inserimento di testo o dati numerici e le sue modalità di utilizzo.
Velocizza i Calcoli con il Cloud Network MQL5 Velocizza i Calcoli con il Cloud Network MQL5
Quanti core hai sul tuo computer di casa? Quanti computer puoi utilizzare per ottimizzare una strategia di trading? Qui mostriamo come utilizzare il Cloud Network MQL5 per accelerare i calcoli ricevendo la potenza di calcolo in tutto il mondo con un click del mouse. La frase "Il tempo è denaro" diventa ancora più attuale con il passare degli anni e non possiamo permetterci di aspettare calcoli importanti per decine di ore o addirittura giorni.
MQL5 Wizard: Nuova Versione MQL5 Wizard: Nuova Versione
L'articolo contiene le descrizioni delle nuove funzionalità disponibili in MQL5 Wizard aggiornato. L'architettura modificata dei segnali consente di creare robot di trading basati sulla combinazione di vari modelli di mercato. L'esempio contenuto nell'articolo spiega la procedura di creazione interattiva di un Expert Advisor.