Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 251

 

Ciao, voglio scrivere un pannello di trading per il mio EA in due versioni mql4 e mql5. Non ho ancora familiarità con gli oggetti grafici. Ho usato un esempio dalla classe CLabel della libreria standard per creare un menu mobile. In mql5, il menu funziona bene, ma non in mql4. Quando un periodo del grafico viene cambiato, gli oggetti del menu vengono duplicati e la loro posizione relativa cambia. Forse a mql4 mancano alcuni metodi nella classe CLabel, che mql5 ha? Potreste suggerire cosa aggiungere in questa classe per evitare tali problemi?

Anche nel codice di esempio della classe CLabel non mi è chiaro cosa fanno queste linee:

EVENT_MAP_BEGIN(CControlsDialog) 
  
EVENT_MAP_END(CAppDialog)
 
Aleksandr Teleguz:

Ciao, voglio scrivere un pannello di trading per il mio EA in due versioni mql4 e mql5. Non ho ancora familiarità con gli oggetti grafici. Ho usato un esempio dalla classe CLabel della libreria standard per creare un menu mobile. In mql5, il menu funziona bene, ma non in mql4. Quando un periodo del grafico viene cambiato, gli oggetti del menu vengono duplicati e la loro posizione relativa cambia. Forse a mql4 mancano alcuni metodi nella classe CLabel, che mql5 ha? Potreste suggerire cosa aggiungere in questa classe per evitare tali problemi?

Inoltre, non mi è chiaro cosa fanno queste stringhe nel codice dell'esempio della classe CLabel:


Le linee specificate sono macro che sono scritte nel file Defines.mqh. Letteralmente, la prima linea della macro passa il controllo alla funzione di gestione degli eventi della classeCControlsDialog, poi le funzioni vengono eseguite tra queste macro e l'ultima macro passa il controllo alla classeCAppDialog

 
Алексей Барбашин:

Le linee specificate sono macro, che sono scritte nel file Defines.mqh. Letteralmente, la prima linea della macro passa il controllo alla funzione di gestione degli eventi della classeCControlsDialog, poi vengono eseguite le funzioni tra queste macro, e l'ultima macro passa il controllo alla classeCAppDialog


Grazie, qualcosa comincia a diventare chiaro) E puoi darmi un link alla documentazione sull'argomento delle macro?

 
Aleksandr Teleguz:

Grazie, comincia ad avere senso) Puoi darmi un link alla documentazione sull'argomento delle macro?


https://www.mql5.com/ru/docs/basis/preprosessor/constant

Документация по MQL5: Основы языка / Препроцессор / Макроподстановка (#define)
Документация по MQL5: Основы языка / Препроцессор / Макроподстановка (#define)
  • www.mql5.com
Основы языка / Препроцессор / Макроподстановка (#define) - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

int OnDeinit()

{

Alert("beg OnDeinit()");

// err=StringToInteger(err);

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

ritorno(0);

Alert("fine OnDeinit()");

}

//OnDeinit();-----------

L'errore prigioniero è descritto come un intero


Non vedo quale sia il problema.

Ricevuto il messaggio

 
buyanov:

int OnDeinit()

{

Alert("beg OnDeinit()");

// err=StringToInteger(err);

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

ritorno(0);

Alert("fine OnDeinit()");

}

//OnDeinit();-----------

L'errore prigioniero è descritto come un intero


Non vedo quale sia il problema.

Ho ricevuto un messaggio


Non mi è molto chiaro quale sia il problema e dove si genera l'errore. Se avete una variabile err di tipo int, perché nella linea commentata state cercando di convertirla da stringa a int? Dove si verifica esattamente l'errore?

 
Алексей Барбашин:

Non è chiaro quale sia il problema e da dove venga l'errore. Se avete una variabile err di tipo int, perché state cercando di convertirla da stringa a int nella stringa commentata? In quale luogo si verifica un errore?

Il fatto è che non vedo nessun errore, ma ricevo un messaggio di avvertimento che implica la conversione da intero a stringa. In ogni caso, dobbiamo trovare una soluzione.
 
buyanov La stringa di errore è descritta come un intero Non è chiaro quale sia il problema

Il messaggio del compilatore indica la linea e la posizione dell'errore. Potete cliccare sulla linea della descrizione (linea inferiore nell'immagine) e il cursore indicherà l'errore nel testo del programma. La funzione DeInit viene eseguita proprio prima che l'indicatore o Expert Advisor venga rimosso dal grafico. Qui, per esempio, gli elementi grafici creati possono essere cancellati. Se non ci sono azioni da eseguire (la funzione è vuota) - la funzione può essere cancellata... Se avete qualcosa come la stringa x=125, correggete in stringa x = (stringa)125

Invece di err=StringToInteger(err); err=StringToInteger((string)err); anche se qualcuno potrebbe trovarlo divertente

 
STARIJ:

Il messaggio del compilatore indica la linea e la posizione dell'errore. Potete cliccare sulla linea della descrizione (linea inferiore nell'immagine) e il cursore indicherà l'errore nel testo del programma. La funzione DeInit viene eseguita proprio prima che l'indicatore o Expert Advisor venga rimosso dal grafico. Qui, per esempio, gli elementi grafici creati possono essere cancellati. Se non ci sono azioni da eseguire (la funzione è vuota) - la funzione può essere cancellata... Se avete qualcosa come la stringa x=125 corretto in stringa x = (stringa)125

Invece di err=StringToInteger(err); err=StringToInteger((string)err); anche se alcuni potrebbero trovarlo divertente


ms...

Ho fatto come mi consigliate

mettere la lineaerr=StringToInteger((string)err) nella funzioneOption; nessun errore.

Ma l'avvertimento della conversione implicita da stringa a numero rimane ancora, credo che il terminale dovrà essere reinstallato dopo tutto.

 
buyanov: Ho fatto, come mi hai consigliato, mettere la lineaerr=StringToInteger((string)err) nella funzione OnDeinit; nessun errore.

Ma l'avvertimento della conversione implicita da stringa a numero rimane ancora, credo che dovrò reinstallare il terminale dopo tutto.

Per favore pubblicate la vostra funzione OnDeinit - la guarderò. E ditemi cosa volete da esso. MetaEditor dà questo errore. Avere una copia della cartella del terminale. Qui Alexey Viktorov ha detto come reinstallare rapidamente