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

 

9. Возврат предыдущего значения _V_LAST. 

Предыдущее значение всех параметров сохраняется автоматически. Чтобы его получить, необходимо вызвать функцию элемента и передать идентификатор  _V_LAST.

Посмотрим как это делается на практическом примере:

1. Открываем нужное окно:

   //------------------------------------------------
   //Open the window "Settings example 2".

   w_7_Settings_example_2();
   //------------------------------------------------

 



2. Посылаем значение (символьную строку) в верхнее поле ввода:

   //------------------------------------------------
   //Set up the first string in the textbox:

   w7_s_p4_EDIT_Comment_1("1, 2, 3, 4, 5");
   //------------------------------------------------



3. Теперь посылаем другую строку в тоже поле:

   //------------------------------------------------
   //Right after, reset it by the new string:

   w7_s_p4_EDIT_Comment_1("A, B, C, D, E");
   //------------------------------------------------



4. Получим назад прежнюю строку:

   //------------------------------------------------
   //Get back the first value:

   string The_first_value = w7_s_p4_EDIT_Comment_1(get_s,p4_V_LAST);
   //------------------------------------------------


5. И перешлем ее в поле ниже:

   //------------------------------------------------
   //And send it into the textbox below:

   w7_s_p4_EDIT_Comment_2(The_first_value);
   //------------------------------------------------


6. Вновь перепишем строку верхнего поля:

   //------------------------------------------------
   //Reset the value again:

   w7_s_p4_EDIT_Comment_1("A1, B2, C3, D4, E5");
   //------------------------------------------------


7. Пошлем предыдущую строку в нижнее поле:

   //------------------------------------------------
   //And get the the previous value back:

   string The_second_value = w7_s_p4_EDIT_Comment_1(get_s,p4_V_LAST);
   //------------------------------------------------
   
   //------------------------------------------------
   //Send it into the third textbox:

   w7_s_p4_EDIT_Comment_3(The_second_value);
   //------------------------------------------------



Результат:

  • В верхнем поле   -  текущая строка.
  • В среднем поле   -  исходная строка.
  • В нижнем поле    -  вторая строка.

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

Тот же подход работает во всех случаях. 

С помощью идентификатора _V_LAST можно получить последнее значение любых элементов (если идентификатор прописан в списке индивидуальных свойств). 




Далее, рассмотрим установку состояний ON/OFF и блокировку элементов.

 
Реter Konow #:
Один и тот же подход работает во всех случаях.

Включает ли он также состояние ON/OFF?

 
hini #:

Включает ли он также состояние ON/OFF?

_V_LAST возвращает последнее значение параметра любого элемента. 

Можно использовать подход показанный выше к другим элементам. Покажу на примере слайдера и поля с кнопками после темы переключения состояний элементов.

Когда будем рассматривать синхронизацию, одно поле будет возвращать текущее значение слайдера, а второе - предыдущее.

 

10. Установка состояний ON,  OFF,  LOCK_ON,  LOCK_OFF,  LOCK,  UNLOCK для разных элементов:

Существуют типы элементов обладающее состояниями ON и OFF. Классический пример: кнопки и чекбоксы. Однако, есть много элементов, которые всегда находятся в нейтральном состоянии. Всегда "OFF". Что общего между ними, и кнопками с чекбоксами? Те и другие могут быть заблокированы и разблокированы. Разница, что кнопки и чекбоксы блокируются в двух состояниях - включенном и выключенном, а остальные элементы только в нейтральном. Из за данных различий появились несколько идентификаторов выполняющих одну функцию - они запирают и отпирают элементы.

Рассмотрим несколько практических примеров:

1. Откроем окно настроек с кнопками и чекбоксами:

   //------------------------------------------------
   //Open the window "Settings example 1".
   //------------------------------------------------
   w_6_Settings_example_1();
   //------------------------------------------------



2. Установим включенное состояние для кнопки:

   //------------------------------------------------
   //Set the button "Start" ON:

   w6_i_p1_BUTTON_Start(p1_ON);
   //------------------------------------------------

Результат: кнопка перешла в нажатое состояние.


3. Теперь, установим состояние ON для чекбоксов:

   //------------------------------------------------
   //Set the checkboxes ON:

   w6_i_p7_CHECKBOX_Set_an_option(p7_ON);
   w6_i_p7_CHECKBOX_Set_another_option(p7_ON);
   w6_i_p7_CHECKBOX_And_another_option(p7_ON);
   //------------------------------------------------

Результат: чекбоксы перешли в активированное состояние.

     

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


4. Теперь снимем состояние ON у кнопки "Start" с помощью идентификатора OFF:

   //------------------------------------------------
   //Set the button "Start" OFF:

   w6_i_p1_BUTTON_Start(p1_OFF);
   //------------------------------------------------

Результат: кнопка вернулась в нейтральное состояние.


5. Вернем нейтральное состояние OFF чекбоксам:

   //------------------------------------------------
   //Set the checkboxes OFF:
 
   w6_i_p7_CHECKBOX_Set_an_option(p7_OFF);
   w6_i_p7_CHECKBOX_Set_another_option(p7_OFF);
   w6_i_p7_CHECKBOX_And_another_option(p7_OFF);
   //------------------------------------------------

Результат: чекбоксы вернулись в нейтральное состояние.


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


Теперь перейдем к блокировке кнопки и чекбоксов в двух возможных состояниях: нейтральном и активированном:


1. Заблокируем кнопку в нейтральном состоянии:

   //------------------------------------------------
   //Lock the button "Start" in the state OFF:

   w6_i_p1_BUTTON_Start(p1_LOCK_OFF);
   //------------------------------------------------

Результат: кнопка заперта в нейтральном состоянии.

(*недоработка, исправление будет.)


2. Заблокируем чекбоксы в нейтральном состоянии:

   //------------------------------------------------
   //Lock the checkboxes in the state OFF:

   w6_i_p7_CHECKBOX_Set_an_option(p7_LOCK_OFF);
   w6_i_p7_CHECKBOX_Set_another_option(p7_LOCK_OFF);
   w6_i_p7_CHECKBOX_And_another_option(p7_LOCK_OFF);
   //------------------------------------------------

Результат: чекбоксы заперты в нейтральном состоянии.


(*проблема пропадания текста в заблокированном состоянии у некоторых элементов будет решена в след.версии).


3. Разом заблокируем кнопку и чекбоксы в нажатом состоянии с помощью идентификатора LOCK_ON:

   //------------------------------------------------
   //Lock the button "Start" in the state ON:

   w6_i_p1_BUTTON_Start(p1_LOCK_ON);
   //------------------------------------------------
   //------------------------------------------------
   //Lock the checkboxes in the state ON:

   w6_i_p7_CHECKBOX_Set_an_option(p7_LOCK_ON);
   w6_i_p7_CHECKBOX_Set_another_option(p7_LOCK_ON);
   w6_i_p7_CHECKBOX_And_another_option(p7_LOCK_ON);
   //------------------------------------------------

Результат: кнопка и чекбоксы заперты в нажатом состоянии.



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

Теперь протестируем комманды LOCK и UNLOCK для элементов которые всегда находятся в нейтральном состоянии.

Для примера, возьмем элементы C_LIST, D_LIST, H_SLIDER и S_EDIT в том же окне:



1. Заблокируем все четыре элемента сразу:

   //------------------------------------------------
   //Lock the elements:

   w6_s_p6_C_LIST_C_LIST_1(p6_LOCK);
   w6_s_p6_D_LIST_D_LIST_1(p6_LOCK);
   w6_i_p3_H_SLIDER_Roll_the_value(p3_LOCK);
   w6_d_p5_S_EDIT_Spin_the_value(p5_LOCK);
   //------------------------------------------------

Результат: элементы C_LIST, D_LIST, H_SLIDER и S_EDIT заблокированы.


2. Разблокируем элементы:

   //------------------------------------------------
   //Unlock the elements:

   w6_s_p6_C_LIST_C_LIST_1(p6_UNLOCK);
   w6_s_p6_D_LIST_D_LIST_1(p6_UNLOCK);
   w6_i_p3_H_SLIDER_Roll_the_value(p3_UNLOCK);
   w6_d_p5_S_EDIT_Spin_the_value(p5_UNLOCK);
   //------------------------------------------------

Результат: элементы были разблокированы обратно.

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

На этих примерах завершаем данную тему, так как остальные элементы запираются и отпираются точно также. 

...

Далее переходим к синхронизации значений параметров.

 
Очень хорошо, очень практично.
 
hini #:
Очень хорошо, очень практично.

Благодарю! Оценка пользователей очень важна для дальнейшей разработки.

 
Взвесив объем материала следующей темы, считаю что ее лучше перенести на завтра, чтобы предыдущие темы лучше запомнились.
 

Признаки хорошего GUI.

Минимализм: минимум занимаемого места на графике, отсутствие незначащих элементов и информации, отвлекающих внимание.

Функциональность: все занимаемое место должно быть максимально полезно, все функции - интуитивно понятны.

Эргономичность: наиболее часто используемые элементы должны быть доступными и крупными.

Эстетичность: выравнивание, стандартные размеры, единый стиль, цветовая гамма.

 
Ivan Titov #:

Признаки хорошего GUI.

Минимализм: минимум занимаемого места на графике, отсутствие незначащих элементов и информации, отвлекающих внимание.

Функциональность: все занимаемое место должно быть максимально полезно, все функции - интуитивно понятны.

Эргономичность: наиболее часто используемые элементы должны быть доступными и крупными.

Эстетичность: выравнивание, стандартные размеры, единый стиль, цветовая гамма.


Спасибо за показанный пример. Полностью согласен с вашими тезисами. Надеюсь что в итоге развития достигну этого уровня.
 
Реter Konow #:
УстановкасостоянияON, OFF, LOCK_ON, LOCK_OFF, LOCK, UNLOCK для различных элементов

Как получить состояние включения/выключения кнопки?