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.