Galeria de UIs escritas em MQL - página 63

 
hini #:
A conversão de tipo forçada aqui, pode ser colocada dentro de uma função para que o usuário não precise escrever (string) fora da função

Não entendi muito bem a pergunta, portanto minha resposta pode estar fora do tópico.

Você poderia fazer isso da seguinte forma:


A função double faz um retorno para uma variável do tipo string usando uma conversão forçada na etapa de retorno de valor.
string Spin_edit_value = (string)w6_d_p5_S_EDIT_Spin_the_value();

w7_s_p4_EDIT_Comment_2(Spin_edit_value);
 

Posso simplificar ainda mais:

w7_s_p4_EDIT_Comment_2((string)w6_d_p5_S_EDIT_Spin_the_value());
 

Teoricamente, você poderia fazer isso dessa forma:

w7_s_p4_EDIT_Comment_2(w6_d_p5_S_EDIT_Spin_the_value());

O próprio compilador converte double em string, mas eu não gostaria de recomendar isso.

 
Реter Konow #:

Não entendo muito bem a pergunta, portanto minha resposta pode estar fora do tópico.

Você pode fazer isso da seguinte forma:


A função double retorna uma variável do tipo string por meio de conversão forçada na etapa de retorno de valor.
Dentro da função w7_s_p4_EDIT_Comment_2, converta o tipo
double Spin_edit_value = 22.5;

w7_s_p4_EDIT_Comment_2(Spin_edit_value);
 
Реter Konow #:

Teoricamente, isso poderia ser feito:

O próprio compilador converterá double em string, mas eu não recomendo isso.

A função w7_s_p4_EDIT_Comment_2 não pode gerar uma versão sobrecarregada correspondente que receba o tipo double?

 

Continuando o tópico de definição de propriedades e retorno e encaminhamento de valores entre elementos.


Analisamos várias opções:

1. Definir texto em um campo de entrada de texto.

w7_s_p4_EDIT_Comment_1("Some random text");

2. Atribuiu um novo valor ao controle deslizante.

w6_i_p3_H_SLIDER_Roll_the_value(33);

3. Selecionou um número arbitrário para o campo de entrada com botões.

w6_d_p5_S_EDIT_Spin_the_value(423.11);

4. Enviou várias cadeias de texto para as células da tabela Account Info.

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. Por fim, retornamos o novo valor do elemento S_EDIT e o enviamos para duas janelas diferentes: a célula na tabela Account Info e o campo de entrada de texto na janela Settings, exemplo 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 concluir este tópico e passar para o próximo, precisamos fazer algumas coisas:

1. Alterar a cor da barra deslizante.

2. Alterar a cor da base e do texto do S_EDIT.

3. Alterar as cores do botão nos estados pressionado e não pressionado.

4. Verifique o envio de valores para os elementos no evento do cronômetro.

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


1. Altere a cor da 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:



Atribua uma cor diferente à barra deslizante:

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


Result:

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


2 . Altere a cor do texto e a base do elemento S_EDIT:

Vamos obter a cor original da base do campo de entrada com botões:

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

Envie-a para o registro:

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


Atribua uma cor diferente à base do campo:

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

Resultado:


Definir a cor do texto do campo S_EDIT ( o prefixo da propriedade p4 é usado em vez de p5, porque esqueci de adicionar a propriedade de cor do texto para S_EDIT.)

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


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


3. Altere as cores do botão nos estados pressionado e não pressionado:

Altere a cor do botão no estado neutro:

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


Defina uma cor diferente para o estado ativado do botão:

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


Você também pode alterar a cor do texto do botão para os estados neutro e pressionado, mas em uma fonte pequena isso não é perceptível. Portanto, vamos escolher uma janela 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); 

Result:


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

Result:


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


4. Verifique o envio de valores para elementos no evento do cronômetro:

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

Result:


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

Isso conclui este tópico.


Em seguida, passaremos aos tópicos:

9. Retorno do valor anterior (_V_LAST). Quando e para quais casos o último valor é necessário (não confundir com o valor atual).

10. Teste a configuração dos estados ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK para diferentes tipos de elementos.

 
hini #:

Dentro da função w7_s_p4_EDIT_Comment_2, converta o tipo

Você pode fazer isso. Mas haverá um aviso adicional, pois se trata de uma conversão de tipo implícita. Tecnicamente, você pode enviar apenas um número. Sem uma variável. Deixo isso a critério de todos.

 
hini #:

Dentro da função w7_s_p4_EDIT_Comment_2, converta o tipo

Não há nada dentro da função w7_s_p4_EDIT_Comment_2. Ela é um wrapper que chama a função central. E a função wrapper só pode retornar um valor de seu próprio tipo.



h ini #: A função w7_s_p4_EDIT_Comment_2 não pode gerar uma versão sobrecarregada correspondente que usa o tipo double?

Infelizmente, não pode, porque é um wrapper. Não faz sentido complicá-la. Todo o trabalho é feito pelas funções centrais.
 
Реter Konow #:

A função w7_s_p4_EDIT_Comment_2 não tem nada em seu interior . Ela é apenas um wrapper que chama uma função central. As funções de wrapper só podem retornar valores de seu próprio tipo.


Ela não pode, porque é um wrapper. Não há necessidade de complicá-la. Todo o trabalho é feito pela função central.

Certo.

 

Hoje, vamos dar uma olhada em quatro tópicos:

9. Retornando o valor _V_LAST anterior .

10. Definição dos estados ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK para diferentes tipos de elementos.

11. Sincronização de alterações de parâmetros: por exemplo, campo de entrada com botões e controle deslizante. O objetivo é que, quando o primeiro valor for alterado, o segundo valor seja alterado de acordo. Vamos configurar a comunicação primeiro em uma janela e depois entre as janelas.

12. Redefina programaticamente os limites do intervalo do controle deslizante e do campo com botões.

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

Até agora, abordamos os seguintes tópicos:

1. orientação na lista do intellisense e seleção da função da janela desejada.

2. Abertura e fechamento de janelas pelo software.

3. orientação na lista do intellisense e seleção do elemento necessário na janela desejada.

4. Navegação pelas listas de propriedades de elementos individuais.

5. Analisar o nome de um elemento e a função de janela.

6. Retorno do valor do parâmetro de um elemento selecionado para uma variável de seu tipo. Considerar três tipos de vários elementos diferentes.

7. Definir valores nos parâmetros de diferentes tipos de elementos. Vamos ver como os valores aparecerão nas janelas de interface desses elementos.

8. Retornar os valores dos parâmetros de um elemento, modificar e encaminhar esse valor para outro elemento. Considere diferentes tipos de elementos e valores e teste o encaminhamento entre diferentes tipos de elementos em diferentes janelas.

9. Retornar o valor anterior (_V_LAST). Quando e para quais casos o último valor é necessário (não confundir com o valor atual).

10. Teste a configuração dos estados ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK para diferentes tipos de elementos.

11. Vamos tentar vincular e sincronizar as alterações de valores de elementos de tipos diferentes: por exemplo, campo de entrada com botões e controle deslizante. Vamos supor que, quando o valor de um elemento (manual ou de software) for alterado, o valor do segundo elemento será alterado de forma correspondente.

12. Vamos tentar redefinir programaticamente os limites do intervalo do controle deslizante e do campo de entrada com botões por meio de funções de wrapper. Não tive tempo de testar isso, mas algo sugere que funcionará. No entanto, vamos ver.

13. Vamos tentar retornar os estados dos elementos por meio de funções de wrapper. Isso está incluído na funcionalidade, mas não tive tempo de testá-la. Então, vamos ver... O resultado é desconhecido.

14. Vamos obter e definir cores para texto e bases de elementos. Podemos tentar associar essas cores a alguns eventos simples ou limites de valores.

15. Vou lhe dizer mais sobre como navegar e ler a impressão do novo arquivo de API.