Galería de interfaces de usuario escritas en MQL - página 63

 
hini #:
C onversión de tipo forzada aquí, ¿se puede poner dentro de una función para que el usuario no tenga que escribir (cadena) fuera de la función

No entendí bien la pregunta, así que mi respuesta puede estar fuera de tema.

Se podría hacer así:


La función double hace un retorno a una variable de tipo string usando una conversión forzada en el paso de retorno del valor.
string Spin_edit_value = (string)w6_d_p5_S_EDIT_Spin_the_value();

w7_s_p4_EDIT_Comment_2(Spin_edit_value);
 

Puedo hacerlo aún más sencillo:

w7_s_p4_EDIT_Comment_2((string)w6_d_p5_S_EDIT_Spin_the_value());
 

Teóricamente, podrías hacerlo así:

w7_s_p4_EDIT_Comment_2(w6_d_p5_S_EDIT_Spin_the_value());

El propio compilador convierte double a string, pero no me gustaría recomendarlo.

 
Реter Konow #:

No entiendo muy bien la pregunta, así que puede que mi respuesta se salga del tema.

Se puede hacer así:


La función double devuelve una variable de tipo string por conversión forzada en el paso de devolución del valor.
Dentro de la función w7_s_p4_EDIT_Comment_2 entonces convierte el tipo
double Spin_edit_value = 22.5;

w7_s_p4_EDIT_Comment_2(Spin_edit_value);
 
Реter Konow #:

En teoría, esto podría hacerse:

El propio compilador convertirá double a string, pero no lo recomiendo.

No puede la función w7_s_p4_EDIT_Comment_2 generar una versión sobrecargada correspondiente que reciba el tipo double?

 

Continuando con el tema de establecer propiedades y devolver y reenviar valores entre elementos.


Vimos varias opciones:

1. Establecer texto en un campo de entrada de texto.

w7_s_p4_EDIT_Comment_1("Some random text");

2. Asignar un nuevo valor al deslizador.

w6_i_p3_H_SLIDER_Roll_the_value(33);

3. Seleccionado un número arbitrario para el campo de entrada con botones.

w6_d_p5_S_EDIT_Spin_the_value(423.11);

4. Enviado múltiples cadenas de texto a las celdas de la tabla Información de la cuenta.

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. Finalmente, devolvemos el nuevo valor del elemento S_EDIT y lo enviamos a dos ventanas diferentes: la celda de la tabla Account Info y el campo de entrada de texto de la ventana Settings ejemplo 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);

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


Para completar este tema y pasar al siguiente, necesitamos hacer algunas cosas:

1. Cambiar el color de la barra deslizante.

2. Cambiar el color de la base S_EDIT y del texto.

3. Cambiar los colores del botón en los estados pulsado y sin pulsar.

4. Comprobar el envío de valores a los elementos en el evento del temporizador.

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


1. Cambiar el color de la barra deslizante:

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

Resultado:



Asignar un color diferente a la barra deslizante:

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


Resultado:

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


2 Cambiar el color del texto y de la base del elemento S_EDIT:

Obtengamos el color original de la base del campo de entrada con botones:

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

Enviémoslo al registro:

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


Asignemos un color diferente a la base del campo:

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

Resultado:


Establecer el color del texto del campo S_EDIT. (Se utiliza el prefijo de propiedad p4 en lugar de p5, porque olvidé añadir la propiedad de color de texto para S_EDIT. el error será corregido en la próxima versión).

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


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


3. Cambiar los colores del botón en los estados pulsado y sin pulsar:

Cambiar el color del botón en estado neutro:

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


Establezca un color diferente para el estado activado del botón:

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


También se puede cambiar el color del texto del botón para los estados neutro y pulsado, pero en una fuente pequeña no se nota. Por lo tanto, vamos a elegir una ventana diferente:

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

Resultado:


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

Resultado:


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


4. Comprobar el envío de valores a los elementos en el evento temporizador:

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

Resultado:


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

Con esto terminamos este tema.


A continuación, pasamos a los temas:

9. Retorno del valor anterior (_V_LAST). Cuándo y para qué casos se requiere el último valor (no confundir con el valor actual).

10. Probar la configuración de los estados ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK para distintos tipos de elementos.

 
hini #:

Dentro de la función w7_s_p4_EDIT_Comment_2, a continuación, convertir el tipo

Puede hacerlo. Pero habrá una advertencia adicional, porque es una conversión de tipo implícita. Técnicamente, sólo puede enviar un número. Sin una variable. Lo dejo a la discreción de cada uno.

 
hini #:

Dentro de la función w7_s_p4_EDIT_Comment_2, convierte el tipo

Dentro de la función w7_s_p4_EDIT_Comment_2 no hay nada. Es una envoltura que llama a la función central. Y la función envolvente sólo puede devolver un valor de su propio tipo.



h ini #: ¿No puede la función w7_s_p4_EDIT_Comment_2 generar una versión sobrecargada correspondiente que tome el tipo double?

Por desgracia, no puede, porque es una envoltura. No tiene sentido complicarla. Todo el trabajo lo hacen las funciones centrales.
 
Реter Konow #:

La función w7_s_p4_EDIT_Comment_2 no tiene nada dentro . Es sólo una envoltura que llama a una función central. Las funciones envolventes sólo pueden devolver valores de su propio tipo.


No puede, porque es una envoltura. No hay necesidad de complicarlo. Todo el trabajo lo hace la función central.

Correcto.

 

Veamos hoy cuatro temas:

9. Devolver el valor _V_LAST anterior .

10. Establecer los estados ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK para diferentes tipos de elementos.

11. Sincronización de cambios de parámetros: por ejemplo, campo de entrada con botones y deslizador. El objetivo es que cuando cambie el primer valor, el segundo cambie en consecuencia. Establezcamos la comunicación primero en una ventana y luego entre ventanas.

12. Reajustar programáticamente los límites de rango del deslizador y del campo con botones.

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

Hasta ahora hemos tratado los siguientes temas:

1. Orientación en la lista de intellisense y selección de la función de la ventana deseada.

2. Apertura y cierre de ventanas por software.

3. Orientación en la lista de intellisense y selección del elemento deseado en la ventana deseada.

4. Navegación a través de listas de propiedades de elementos individuales.

5. 5. Análisis sintáctico del nombre de un elemento y de la función envolvente de la ventana.

6. devolver el valor del parámetro de un elemento seleccionado a una variable de su tipo. Considerar tres tipos de varios elementos diferentes.

7. Estableciendo valores en los parámetros de diferentes tipos de elementos. Veamos cómo aparecerán los valores en las ventanas de interfaz de estos elementos.

8. Devolver los valores de los parámetros de un elemento, modificando y reenviando ese valor a otro elemento. Consideremos diferentes tipos de elementos y valores, y probemos el reenvío entre diferentes tipos de elementos en diferentes ventanas.

9. Devolución del valor anterior (_V_LAST). Cuándo y para qué casos se requiere el último valor (no confundir con el valor actual).

10. Probar la configuración de estados ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK para diferentes tipos de elementos.

11. Intentemos enlazar y sincronizar los cambios de valores de elementos de diferentes tipos: por ejemplo, campo de entrada con botones y deslizador. Supongamos que cuando el valor de un elemento (manual o software) cambia, el valor en el segundo elemento cambia en consecuencia.

12. Intentemos restablecer mediante programación los límites de rango del deslizador y del campo de entrada con botones a través de funciones wrapper. No he tenido tiempo de probarlo, pero algo me sugiere que funcionará. No obstante, vamos a ver.

13. Intentemos devolver estados de elementos a través de funciones wrapper. Está incluido en la funcionalidad, pero no he tenido tiempo de probarlo. Así que veremos... El resultado es desconocido.

14. Vamos a obtener y establecer colores para el texto y las bases de los elementos. Podemos intentar asociar estos colores con algunos eventos simples o límites de valores.

15. Te contaré más sobre cómo navegar y leer la impresión del nuevo archivo API.