Galerie d'interfaces utilisateur écrites en MQL - page 61

 
hini #:
Parce que dans le testeur, il n'appelle pas OnChartEvent.

C'est tout à fait exact. Mais dans la même situation dans MT4, il y avait des variantes possibles. J'ai réussi à mettre en œuvre l'une d'entre elles. L'interface fonctionnait pour un Expert Advisor fonctionnant en mode normal, mais elle pouvait contrôler sa copie fonctionnant dans le testeur. La connexion a été réalisée par le biais de ressources. L'Expert Advisor sur le graphique a reçu toutes les données pendant le processus de test. Avec MT5, la situation est peut-être plus compliquée. Je ne suis pas sûr qu'il sera possible d'établir une "communication" entre deux copies via des ressources. Cette question doit faire l'objet d'une étude distincte.

 
Passons au sujet suivant :

4. naviguer dans des listes de propriétés d'éléments individuels.

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

Permettez-moi de vous rappeler la liste des sujets à prendre en considération :

1. s'orienter dans la liste d'intellisense et sélectionner la fonction de la bonne fenêtre.

2. Ouverture et fermeture programmées des fenêtres.

3. s'orienter dans la liste d'intellisense et sélectionner le bon élément dans la bonne fenêtre

4. naviguer dans des listes de propriétés d'éléments individuels.

5. Analyse du nom d'un élément et d'une fonction d'enveloppe de fenêtre.

6. lerenvoi de la valeur du paramètre d' un élément sélectionné à une variable de son type. Considérer trois types d'éléments différents.

7. Définition de valeurs dans les paramètres de différents types d'éléments. Voyons comment les valeurs apparaîtront dans les fenêtres d'interface de ces éléments.

8. Renvoyer les valeurs des paramètres d'un élément, modifier et transmettre cette valeur à un autre élément. Considérons différents types d'éléments et de valeurs, et testons la transmission entre différents types d'éléments dans différentes fenêtres.

9. Retour de la valeur précédente (_V_LAST). Quand et dans quels cas la dernière valeur est requise (à ne pas confondre avec la valeur actuelle).

10. Tester le réglage des états ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK pour différents types d'éléments.

11. Essayons de lier et de synchroniser les changements de valeurs d'éléments de différents types : par exemple, un champ de saisie avec des boutons et un curseur. Supposons que lorsque la valeur d'un élément (manuel ou logiciel) change, la valeur du second élément change en conséquence.

12. Essayons de réinitialiser par programme les limites de la plage du curseur et du champ de saisie avec boutons au moyen de fonctions d'enveloppe. Je n'ai pas eu le temps de le tester, mais quelque chose me laisse penser que cela fonctionnera. Cependant, voyons ce qu'il en est.

13. Essayons de renvoyer les états des éléments via des fonctions wrapper. C'est inclus dans la fonctionnalité, mais je n'ai pas eu le temps de le tester. Nous verrons bien... Le résultat est inconnu.

14. Obtenons et définissons des couleurs pour le texte et les bases des éléments. Nous pouvons essayer d'associer ces couleurs à des événements simples ou à des limites de valeurs.

15. Je vous en dirai plus sur la manière de naviguer et de lire le nouveau fichier API imprimé.

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

La couleur jaune indique les sujets qui ont déjà été traités.

 
Décortiquons le sujet point par point :

  • Le concept de séparation des propriétés en listes, basé sur la "parenté" des éléments, a été mis en œuvre avec succès.
  • Grâce à cette mise en œuvre, 7 listes de propriétés uniques ont été créées pour tous les types d'éléments.
  • Un identifiant spécial est attribué à chaque liste. Il s'agit du préfixe p (abréviation de propriété) et d'un numéro de série.
  • Par conséquent, chaque liste peut être trouvée dans intellisense par sept préfixes : p1, p2, p3, p4, p5, p6 et p7.
  • Pour des raisons de commodité et pour éviter toute confusion, les préfixes des listes de propriétés sont imprimés dans les noms des fonctions enveloppantes :

  • Lorsque le préfixe est saisi, une liste de propriétés individuelles apparaît. J'ai volontairement mis l'accent sur le mot "individuel", car ce point est d'une importance capitale.
  • Pour renvoyer et définir les valeurs des propriétés, les fonctions enveloppantes acceptent les noms de propriétés UNIQUEMENT avec le préfixe écrit dans leur propre nom:


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


  • SEULES ces propriétés de la liste sont disponibles pour la case à cocher. Cependant, la liste elle-même n'appartient pas seulement à la case à cocher, mais aussi à d'autres éléments.

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


  • L'élément C_LIST n'a pas encore de propriétés spéciales dans sa liste. Seules des actions peuvent être effectuées par le wrapper (à l'exception du retour de V_LAST - la dernière valeur).

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


  • Contrairement à C_LIST, le curseur dispose d'une large liste de propriétés et d'actions disponibles.

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


  • L'élément S_EDIT dispose d'un large éventail de propriétés et d'actions :


C'est nous qui soulignons :

Chaque fonction enveloppante n'accepte que les propriétés dont le préfixe est indiqué en toutes lettres dans son nom.


Voici comment travailler avec des listes en pratique(mettez des parenthèses à la fin, car intellisense ne fonctionne pas à l'intérieur des parenthèses des fonctions enveloppantes) :

La vidéo est légèrement accélérée.


À la suite des appels montrés dans l'image, les fonctions enveloppantes renvoient les valeurs des propriétés spécifiées.

Avant l'appel, vous devez déclarer une variable pour stocker la valeur de la propriété ou le résultat de l'exécution de la fonction. Vous trouverez plus d'informations à ce sujet dans les rubriques suivantes.

 

5.
Analyse du nom de l'élément et de la fonction d'habillage de la fenêtre:


1. Nom de la fonction d'habillage de l'élément :

Examinons l'exemple de la fonction d'élément du champ de saisie de texte EDIT : w7_s_p4_EDIT_Comment_1();

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

  • w7 - fenêtre numéro 7

//-------------------------------------------------------------
  • s - Type de valeur de retour de cette fonction wrapper string.

//-------------------------------------------------------------
  • p4 - Préfixe de la liste des propriétés de ce type d'élément.

/ / - ------------------------------------------------------------
  • EDIT - Type d'élément.

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

  • Comment_1 - Nom de l' élément spécifique.

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


2. Le nom de la fonction d'habillage de la fenêtre :

Prenons l'exemple d'une autre fonction : w_15_Processing_the_data() ;

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

  • w_15 - fenêtre numéro 15
Notez que le numéro ne vient pas immédiatement après w, mais à travers le tiret _. C'est important.

) // - ------------------------------------------------------------
  • Processing_the_data - Le nom de cette fenêtre (dans le cas des fenêtres d'avertissement, le nom peut ne pas coïncider avec Caption - le texte dans l'en-tête de la fenêtre).

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

Il convient de noter que la fonction de fenêtre ne dispose pas encore d'un préfixe permettant d'ouvrir la liste des propriétés. Cette fonctionnalité fera certainement son apparition. Une liste spéciale de propriétés de fenêtre à retourner/paramétrer sera générée et un préfixe sera attribué. De même, la fonction window ne contient pas encore de lettre de type de retour.

Pour l'instant, la fonction ne peut qu'ouvrir ou fermer une fenêtre.


Ces défauts seront corrigés dans la prochaine version.


 
Il est recommandé de résumer ces informations de tutorat une fois en privé et séparément, sinon elles inonderont les commentaires à l'avenir.
 
hini #:
Il est recommandé de résumer ces informations de formation une fois en privé et séparément, sinon elles inonderont les commentaires à l'avenir
Bien entendu, ces informations seront résumées et ordonnées comme il se doit.
 
Dans la période actuelle, l'ordre des instructions, des explications et des commentaires est en train de se former. Le contenu de la future documentation s'accumule harmonieusement au cours du processus de développement et de communication avec les utilisateurs. Par conséquent, les informations de base sont présentées en plusieurs parties. Recevoir un retour d'information est nécessaire et c'est une étape importante qui augmente la qualité des solutions techniques. Le logiciel passe par une phase de formation et pourra atteindre sa pleine fonctionnalité grâce à la participation active du public. Le résultat sera un programme complet avec une documentation détaillée.
 

6.renvoyer la valeur duparamètre ou de la propriété à une variable du type requis :


Le type du paramètre de l'élément(int, double ou string) détermine le type de la fonction de l'élément.

On sait que les fonctions d'élément renvoient la valeur du paramètre avec l'un des trois types suivants : int, double ou string.

Cependant, les fonctions renvoient également des valeurs de propriété...

Une situation se présente lorsque le type de la valeur du paramètre ne coïncide pas avec le type des propriétés, qui sont toujours de type int. Il s'avère que les fonctions renvoient des valeurs de propriété du mauvais type, par exemple double ou string au lieu de int. Cet inconvénient forcé est le prix à payer pour l'universalité des fonctions.

La tâche de l'utilisateur consiste à de convertir lui-même la valeur reçue dans le type requis..


Permettez-moi d'insister sur le fait que le type principal de toutes les propriétés d'éléments est int.


Examinons de plus près les exemples de questions-réponses :

  • - Q: Comment la fonction renverra-t-elle la valeur d'une propriété de type int si le type de la fonction est string?
  • - Réponse: La fonction renverra la valeur de int avec le type string.
  • - Question: Comment la fonction renverra-t-elle la valeur deint si le type de la fonction est double?
  • - Réponse: La fonction renverra la valeur de int avec le type double.
  • - Question: Comment la fonction renverra-t-elle la valeur double si le type de la fonction est int?
  • - Réponse: Les propriétés des éléments de type double n'existent pas. Les propriétés du paramètre de l'élément peuvent être de type double. Dans ce cas, la fonction elle-même sera de type double.


Le type de la valeur du paramètre détermine le type de la fonction de l'élément.

Il n'y a pas de propriétés d'un élément de type double. Il n'y a que des int. Mais il existe des propriétés de paramètres qui acceptent les types double, chaîne de caractères ou int. Par exemple, V_CURRENT, V_LAST, V_MAX, V_MIN, V_STEP peuvent être de type int ou double. Dans les deux cas, la fonction élément deviendra également int ou double, mais la fonction ne peut pas devenir int si les propriétés du paramètre, ou le paramètre lui-même, ne sont pas int.

Et si la fonction du curseur renvoie un type int, cela signifie qu'au stade de la création de l'élément, l'utilisateur a lui-même attribué des nombres entiers à son paramètre ou à ses propriétés - par exemple, il a placé la plage du curseur ou les champs de saisie avec les boutons à l'intérieur de valeurs entières.



Conclusion : la tâche de l'utilisateur consiste à convertir les valeurs reçues dans le type requis.

Examinons quelques exemples pratiques :

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

Voir le résultat :


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

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

Voir le résultat :




Ensuite, testons l'obtention et la définition d'autres propriétés d'éléments et de paramètres. Essayons également de travailler avec le type double.

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

J'ai suivi le code et l'ai testé, et j'ai trouvé une chose inattendue qui ne se cache pas automatiquement lorsque la longueur de la chaîne aléatoire est trop longue.

w7_s_p4_EDIT_Comment_1("Some random text AAAAAAAA");


 
Il s'agit de problèmes mineurs, laissez-les pour plus tard et voyez ce qui se passe, si vous avez le temps de les vérifier, sinon ne les corrigez pas pour l'instant !