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

 
hini #:
L a conversion de type forcée ici, peut-elle être placée à l'intérieur d'une fonction afin que l'utilisateur n'ait pas à écrire (chaîne) à l'extérieur de la fonction ?

Je n'ai pas vraiment compris la question, donc ma réponse peut être hors sujet.

Vous pourriez procéder de la manière suivante :


La fonction double renvoie à une variable de type chaîne de caractères en utilisant une conversion forcée à l'étape du retour de la valeur.
string Spin_edit_value = (string)w6_d_p5_S_EDIT_Spin_the_value();

w7_s_p4_EDIT_Comment_2(Spin_edit_value);
 

Je peux faire encore plus simple :

w7_s_p4_EDIT_Comment_2((string)w6_d_p5_S_EDIT_Spin_the_value());
 

Théoriquement, vous pouvez le faire de cette façon :

w7_s_p4_EDIT_Comment_2(w6_d_p5_S_EDIT_Spin_the_value());

Le compilateur convertit lui-même le double en chaîne de caractères, mais je ne voudrais pas le recommander.

 
Реter Konow #:

Je ne comprends pas vraiment la question, donc ma réponse sera peut-être hors sujet.

Vous pouvez procéder de la manière suivante :


La fonction double renvoie une variable de type chaîne de caractères par conversion forcée dans l'étape de retour de valeur.
Dans la fonction w7_s_p4_EDIT_Comment_2, on convertit le type
double Spin_edit_value = 22.5;

w7_s_p4_EDIT_Comment_2(Spin_edit_value);
 
Реter Konow #:

Théoriquement, c'est possible :

Le compilateur lui-même convertira double en chaîne, mais je ne le recommande pas.

La fonction w7_s_p4_EDIT_Comment_2 ne peut-elle pas générer une version surchargée correspondante qui reçoit le type double ?

 

Poursuite du thème de la définition des propriétés et du renvoi et de la transmission des valeurs entre les éléments.


Nous avons examiné plusieurs options :

1. Définir du texte dans un champ de saisie.

w7_s_p4_EDIT_Comment_1("Some random text");

2. Attribution d'une nouvelle valeur au curseur.

w6_i_p3_H_SLIDER_Roll_the_value(33);

3. Sélection d'un nombre arbitraire pour le champ de saisie avec boutons.

w6_d_p5_S_EDIT_Spin_the_value(423.11);

4. Envoyé plusieurs chaînes de texte aux cellules du tableau Infocomptes.

w8_s_p4_CELL_Account_name__Value("MyRealAccount");  

w8_s_p4_CELL_Account_number__Value("A001234647843B1");

w8_s_p4_CELL_Account_server__Value("MyServer");

w8_s_p4_CELL_Account_currency__Value("US Dollar");

w8_s_p4_CELL_Leverage__Value("1:1");

w8_s_p4_CELL_Account_balance__Value("1234567.23 $");


5. Enfin, nous avons renvoyé la nouvelle valeur de l'élément S_EDIT et l'avons envoyée à deux fenêtres différentes : la cellule du tableau Infocomptes et le champ de saisie de texte de la fenêtre Paramètres exemple 2.

 double Spin_edit_value = w6_d_p5_S_EDIT_Spin_the_value();//Делаем возврат значения параметра (тип double).
w8_s_p4_CELL_Account_profit__Value((string)Spin_edit_value);//При пересылке значение double приводим к типу string. Функция ячейки имеет тип string.
w7_s_p4_EDIT_Comment_2((string)Spin_edit_value);

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


Pour terminer ce sujet et passer au suivant, nous devons effectuer quelques opérations :

1. changer la couleur de la barre de défilement.

2. Changer la couleur de la base S_EDIT et du texte.

3. Modifier les couleurs du bouton à l'état enfoncé et à l'état non enfoncé.

4. Vérifier l'envoi de valeurs aux éléments lors de l'événement timer.

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


1. changer la couleur de la barre de défilement :

   //To get slider's bar color:
   uint Sliders_bar_color = (uint)w6_i_p3_H_SLIDER_Roll_the_value(get_i, p3_COLOR_bar);
   
   //Print the returned value:
   Print("Sliders_bar_color =  ",Sliders_bar_color);

Résultat :



Attribuer une couleur différente à la barre de défilement :

   //To set slider's bar color:
   w6_i_p3_H_SLIDER_Roll_the_value((uint)clrRed, p3_COLOR_bar);


Résultat : Attribuer une couleur différente à la barre de défilement : Résultat :

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


2. Changez la couleur du texte et de la base de l'élément S_EDIT :

Obtenons la couleur originale de la base du champ de saisie avec boutons :

   //To get spin edit's base color:
   uint Spin_edit_base_color = (uint)w6_d_p5_S_EDIT_Spin_the_value(get_d, p5_COLOR_base);

Produisons-la dans le journal :

   //Print the returned value:
   Print("Spin_edit_base_color = ",Spin_edit_base_color);


Attribuons une couleur différente à la base du champ :

   //To set spin edit's base color:
   w6_d_p5_S_EDIT_Spin_the_value((uint)clrLightGreen, p5_COLOR_base);

Résultat :


Définition de la couleur du texte du champ S_EDIT (le préfixe de propriété p4 est utilisé au lieu de p5, car j'ai oublié d'ajouter la propriété de couleur de texte pour S_EDIT. le bogue sera corrigé dans la prochaine version).

   //To set spin edit's text color:
   w6_d_p5_S_EDIT_Spin_the_value((uint)clrBrown, p4_COLOR_text);  


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


3. Modifier les couleurs du bouton dans les états pressé et non pressé :

Modifier la couleur du bouton à l'état neutre :

w6_i_p1_BUTTON_Start((uint)C'255,166,0',p1_N_COLOR_base);


Définissez une couleur différente pour l'état activé du bouton:

w6_i_p1_BUTTON_Start((uint)C'166,255,0',p1_A_COLOR_base);


Vous pouvez également modifier la couleur du texte du bouton à l'état neutre et à l'état enfoncé, mais sur une petite police de caractères, cela n'est pas perceptible. Choisissons donc une autre fenêtre :

   //Set text color for button's neutral state:

   //Button 1:
   w14_i_p1_BUTTON_BUY_OFF((uint)C'240,70,10',p1_N_COLOR_text);

   //Button 2:
   w14_i_p1_BUTTON_SELL_OFF((uint)C'240,70,10',p1_N_COLOR_text); 

Résultat :


   //Set text color for button's active state:
   
  //Button 1
   w14_i_p1_BUTTON_BUY_OFF((uint)C'105,240,50',p1_A_COLOR_text);

  //Button 2
   w14_i_p1_BUTTON_SELL_OFF((uint)C'105,240,50',p1_A_COLOR_text);

Résultat : Résultat :


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


4. Vérifiez l'envoi de valeurs aux éléments lors d'un événement de type "timer" :

void _OnTimer()
  {
   string Microseconds = (string)GetMicrosecondCount();
     
   //Send Microseconds to each cell-----------------
   w8_s_p4_CELL_Account_name__Value(Microseconds);
   w8_s_p4_CELL_Account_number__Value(Microseconds);
   w8_s_p4_CELL_Account_server__Value(Microseconds);
   w8_s_p4_CELL_Account_currency__Value(Microseconds);
   w8_s_p4_CELL_Leverage__Value(Microseconds);
   w8_s_p4_CELL_Account_balance__Value(Microseconds);
   w8_s_p4_CELL_Account_profit__Value(Microseconds);
   w8_s_p4_CELL_Account_equity__Value(Microseconds);
   w8_s_p4_CELL_Account_free_margin__Value(Microseconds);
   w8_s_p4_CELL_Account_margin__Value(Microseconds);
   w8_s_p4_CELL_Account_stop_out_level__Value(Microseconds);

Résultat :


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

Ce sujet est terminé.


Nous passons maintenant aux sujets suivants :

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 la configuration des états ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK pour différents types d'éléments.

 
hini #:

A l'intérieur de la fonction w7_s_p4_EDIT_Comment_2, puis convertir le type

Vous pouvez le faire. Mais il y aura un avertissement supplémentaire, car il s'agit d'une conversion de type implicite. Techniquement, vous pouvez simplement envoyer un nombre. Sans variable. Je laisse cela à la discrétion de chacun.

 
hini #:

A l'intérieur de la fonction w7_s_p4_EDIT_Comment_2, convertir le type

Il n'y a rien dans la fonction w7_s_p4_EDIT_Comment_2. Il s'agit d'un wrapper qui appelle la fonction centrale. Et la fonction enveloppante ne peut renvoyer qu'une valeur de son propre type.



h ini #: La fonction w7_s_p4_EDIT_Comment_2 ne peut-elle pas générer une version surchargée correspondante qui prend le type double ?

Hélas, elle ne le peut pas, car il s'agit d'un wrapper. Il est inutile de la compliquer. Tout le travail est fait par les fonctions centrales.
 
Реter Konow #:

La fonction w7_s_p4_EDIT_Comment_2 ne contient rien. Il s'agit simplement d'une enveloppe qui appelle une fonction centrale. Les fonctions enveloppantes ne peuvent renvoyer que des valeurs de leur propre type.


Ce n'est pas le cas, car il s'agit d'une fonction enveloppante. Il n'est pas nécessaire de la compliquer. Tout le travail est fait par la fonction centrale.

C'est vrai.

 

Aujourd'hui, nous allons aborder quatre sujets :

9. Retourner la valeur _V_LAST précédente .

10. Définition des états ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK pour différents types d'éléments.

11. Synchronisation des changements de paramètres : par exemple, champ de saisie avec boutons et curseur. L'objectif est que lorsque la première valeur change, la seconde change en conséquence. Établissons la communication d'abord dans une fenêtre, puis entre les fenêtres.

12. Réinitialisez par programme les limites de la plage du curseur et du champ de saisie avec boutons.

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

Jusqu'à présent, nous avons abordé les sujets suivants

1. l'orientation dans la liste d'intellisense et la sélection de la fonction de la fenêtre souhaitée.

2. Ouverture et fermeture des fenêtres par le logiciel.

3. orientation dans la liste d'intellisense et sélection de l'élément requis dans la fenêtre souhaitée

4. navigation dans les listes de propriétés des différents éléments

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

6. le renvoi 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 vais vous expliquer comment naviguer et lire le nouveau fichier API imprimé.