Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 251

 

Bonjour, je veux écrire un panneau de trading pour mon EA en deux versions mql4 et mql5. Je ne suis pas encore familier avec les objets graphiques. J'ai utilisé un exemple de la classe CLabel de la bibliothèque standard pour créer un menu mobile. Dans mql5, le menu fonctionne bien, mais pas dans mql4. Lorsqu'une période du graphique est modifiée, les objets du menu sont dupliqués et leur emplacement les uns par rapport aux autres change. Peut-être que mql4 n'a pas certaines méthodes dans la classe CLabel, que mql5 a ? Pourriez-vous suggérer ce qu'il faut ajouter dans cette classe pour éviter de tels problèmes ?

De plus, dans l'exemple de code de la classe CLabel, je ne comprends pas bien ce que font ces lignes :

EVENT_MAP_BEGIN(CControlsDialog) 
  
EVENT_MAP_END(CAppDialog)
 
Aleksandr Teleguz:

Bonjour, je veux écrire un panneau de trading pour mon EA en deux versions mql4 et mql5. Je ne suis pas encore familier avec les objets graphiques. J'ai utilisé un exemple de la classe CLabel de la bibliothèque standard pour créer un menu mobile. Dans mql5, le menu fonctionne bien, mais pas dans mql4. Lorsqu'une période du graphique est modifiée, les objets du menu sont dupliqués et leur emplacement les uns par rapport aux autres change. Peut-être que mql4 n'a pas certaines méthodes dans la classe CLabel, que mql5 a ? Pourriez-vous suggérer ce qu'il faut ajouter dans cette classe pour éviter de tels problèmes ?

De plus, je ne comprends pas bien ce que font ces chaînes dans le code de l'exemple de la classe CLabel :


Les lignes spécifiées sont des macros qui sont écrites dans le fichier Defines.mqh. Littéralement, la première ligne de la macro transmet le contrôle à la fonction de traitement des événements de la classeCControlsDialog, puis les fonctions sont exécutées entre ces macros et la dernière macro transmet le contrôle à la classeCAppDialog.

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

Les lignes spécifiées sont des macros, qui sont écrites dans le fichier Defines.mqh. Littéralement, la première ligne de macro transmet le contrôle à la fonction de traitement des événements de la classeCControlsDialog, puis les fonctions situées entre ces macros sont exécutées, et la dernière macro transmet le contrôle à la classeCAppDialog.


Merci, quelque chose commence à devenir clair) Et pouvez-vous me donner un lien vers une documentation sur le sujet des macros ?

 
Aleksandr Teleguz:

Merci, ça commence à avoir du sens) Pouvez-vous me donner un lien vers une documentation sur le sujet des macros ?


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) ;

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

retour(0) ;

Alert("end OnDeinit()") ;

}

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

L'err captif est décrit comme un entier


Je ne vois pas où est le problème.

J'ai reçu le message

 
buyanov:

int OnDeinit()

{

Alert("beg OnDeinit()") ;

// err=StringToInteger(err) ;

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

retour(0) ;

Alert("end OnDeinit()") ;

}

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

L'err captif est décrit comme un entier


Je ne vois pas où est le problème.

J'ai reçu un message


Je ne sais pas exactement quel est le problème et où l'erreur est générée. Si vous avez une variable err de type int, pourquoi, dans la ligne commentée, essayez-vous de la convertir de string en int ? Où l'erreur se produit-elle exactement ?

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

La nature du problème et l'origine de l'erreur ne sont pas claires. Si vous avez une variable err de type int, pourquoi essayez-vous de la convertir de type string à int dans la chaîne commentée ? A quel endroit une erreur se produit-elle ?

Le problème est que je ne vois pas d'erreur, mais je reçois un message d'avertissement implicite de conversion d'un entier en chaîne. Dans tous les cas, nous devons trouver une solution.
 
buyanov La chaîne err est décrite comme un nombre entier. Le problème n'est pas clair.

Le message du compilateur indique la ligne et la position de l'erreur. Vous pouvez cliquer sur la ligne de description (ligne du bas dans l'image) et le curseur indiquera l'erreur dans le texte du programme. La fonction DeInit est exécutée juste avant que l'indicateur ou le conseiller expert ne soit retiré du graphique. Ici, par exemple, les éléments graphiques créés peuvent être supprimés. S'il n'y a aucune action à effectuer (la fonction est vide) - la fonction peut être supprimée... Si vous avez quelque chose comme chaîne x=125, corrigez en chaîne x = (chaîne)125

Au lieu de err=StringToInteger(err) ; err=StringToInteger((string)err) ; bien que certains puissent trouver cela drôle

 
STARIJ:

Le message du compilateur indique la ligne et la position de l'erreur. Vous pouvez cliquer sur la ligne de description (ligne du bas dans l'image) et le curseur indiquera l'erreur dans le texte du programme. La fonction DeInit est exécutée juste avant que l'indicateur ou le conseiller expert ne soit retiré du graphique. Ici, par exemple, les éléments graphiques créés peuvent être supprimés. S'il n'y a aucune action à effectuer (la fonction est vide) - la fonction peut être supprimée... Si vous avez quelque chose comme chaîne x=125, corrigez en chaîne x = (chaîne)125.

Au lieu de err=StringToInteger(err) ; err=StringToInteger((string)err) ; bien que certains puissent trouver cela amusant


ms...

J'ai fait comme vous le recommandez

mettre la ligneerr=StringToInteger((string)err) dans la fonctionOption; aucune erreur.

Mais l'avertissement concernant la conversion implicite d'une chaîne de caractères en un nombre demeure, je suppose que le terminal devra être réinstallé après tout.

 
buyanov: J'ai, comme vous l'avez recommandé, mis la ligneerr=StringToInteger((string)err) dans la fonction OnDeinit; aucune erreur.

Mais l'avertissement concernant la convthtion implicite d'une chaîne de caractères vers un nombre demeure, je suppose que je vais devoir réinstaller le terminal après tout.

Veuillez poster votre fonction OnDeinit - je vais l'examiner. Et dis-moi ce que tu en attends. MetaEditor donne cette erreur. Avoir une copie du dossier du terminal. Alexey Viktorov a expliqué comment réinstaller rapidement le système.

Raison: