Галерея UI написанных на MQL - страница 62

 
hini #:
Принудительное преобразование типа здесь, можно ли его поместить внутрь функции, чтобы пользователю не нужно было писать (string) вне функции

Не очень понял вопрос, поэтому мой ответ может быть невпопад. 

Можно сделать так:

Функция double делает возврат в переменную типа string с помощью принудительного преобразования на этапе возврата значения.

string Spin_edit_value = (string)w6_d_p5_S_EDIT_Spin_the_value();

w7_s_p4_EDIT_Comment_2(Spin_edit_value);
 

Можно еще проще:

w7_s_p4_EDIT_Comment_2((string)w6_d_p5_S_EDIT_Spin_the_value());
 

Теоретически, можно и так:

w7_s_p4_EDIT_Comment_2(w6_d_p5_S_EDIT_Spin_the_value());

компилятор сам преобразует double в string, но не хотел бы это рекомендовать. 

 
Реter Konow #:

Я не очень понимаю вопрос, поэтому мой ответ может быть не по теме.

Вы можете сделать это следующим образом:


Функция double возвращает переменную строкового типа путем принудительного преобразования на шаге возврата значения.
Внутри функции w7_s_p4_EDIT_Comment_2 затем преобразуем тип
double Spin_edit_value = 22.5;

w7_s_p4_EDIT_Comment_2(Spin_edit_value);
 
Реter Konow #:

Теоретически это можно сделать:

Компилятор сам преобразует double в строку, но я не рекомендую этого делать.

Не может ли функция w7_s_p4_EDIT_Comment_2 генерировать соответствующую перегруженную версию, которая принимает тип double?

 

Продолжение темы установки свойств, а также возврата и пересылки значений между элементами.


Мы рассмотрели несколько вариантов: 

1. Установили текст в текстовое поле ввода.  

w7_s_p4_EDIT_Comment_1("Some random text");

2. Назначили новое значение слайдеру.

w6_i_p3_H_SLIDER_Roll_the_value(33);

3. Выбрали произвольное число полю ввода с кнопками.

w6_d_p5_S_EDIT_Spin_the_value(423.11);

4. Послали несколько текстовых строк в ячейки таблицы  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. В итоге, мы вернули новое значение элемента S_EDIT и переслали его в два разных окна: ячейку таблицы Account Info и текстовое поле ввода в окне Settings example 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);

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


Для завершения этой темы и переходу к следующей, необходимо сделать несколько вещей:

1. Изменить цвет полосы слайдера.

2. Поменять цвет основания и текста S_EDIT.

3. Поменять цвета кнопки в нажатом и отжатом состояниях.

4. Проверка отсылки значений в элементы на событии таймера .

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


1. Изменение цвета полосы слайдера:

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

Полученный результат:



Назначим полосе слайдера другой цвет:

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


Результат:

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


2. Изменение цвета текста и основания элемента S_EDIT:

Получим исходный цвет основания поля ввода с кнопками:

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

Выведем его в журнал:

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


Назначим другой цвет основания поля:

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

Результат:


Установка цвета текста поля S_EDIT.  (использован префикс свойства р4 вместо р5, так как забыл добавить свойство цвет текста для  S_EDIT. недоработка исправится в след.версии).

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


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


3. Поменять цвета кнопки в нажатом и отжатом состояниях:

Изменим цвет кнопки в нейтральном состоянии:

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


Установим другой цвет для активированного состояния кнопки:

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


У кнопки также можно менять цвет текста для нейтрального и нажатого состояния, но на маленьком шрифте это незаметно. Поэтому, выберем другое окно:

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

Результат:


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

Результат:


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


4. Проверка отсылки значений в элементы на событии таймера:

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

Результат:


 

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

На этом данная тема завершена.


Далее, переходим к темам:

9. Возврат предыдущего значения (_V_LAST). Когда и для каких случаев требуется последнее значение (не путать с текущим).

10. Протестируем устновку состояний ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK для различных типов элементов.

 
hini #:
Внутри функции w7_s_p4_EDIT_Comment_2 затем преобразуем тип

Внутри функции  w7_s_p4_EDIT_Comment_2 ничего нет. Это обертка вызывающая центральную функцию. А функция обертка может возвращать значение только своего типа. 


hini #:
Не может ли функция w7_s_p4_EDIT_Comment_2 генерировать соответствующую перегруженную версию, которая принимает тип double?

Увы, никак не может, потому что она - обертка. Ее нет смысла усложнять. Вся работа делается центральными функциями.  
 
Реter Konow #:

Функция w7_s_p4_EDIT_Comment_2 не имеет ничего внутри . Это просто обертка, вызывающая центральную функцию. Функции-обертки могут возвращать значения только своего типа.


Она не может, потому что является оберткой. Нет необходимости усложнять ее. Всю работу делает центральная функция.

Верно.