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

 
hini #:

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

Это следующая тема. Мы ее сегодня рассмотрим.

Добавлю, что элементы этого GUI рисованные, поэтому стандартный метод получения состояния  ObjectGetInteger(0, "button1", OBJPROP_STATE); работать не будет.

Также, напомню что события элементов, в том числе кнопок, приходят в API файл.

 

Общий список тем для рассмотрения:

1. Ориентирование в списке интеллисенс и выбор функции нужного окна.

2. Программное открытие и закрытие окон. 

3. Ориентирование в списке интеллисенс и выбор нужного элемента в нужном окне.

4. Ориентирование в списках индивидуальных свойств элементов.

5. Разбор названия функции обертки элемента и окна.

6. Возврат значения параметра выбранного элемента в переменную его типа. Рассмотрим три типа нескольких разных элементов.

7. Установка значений в параметры разных типов элементов. Посмотрим как значения будут появляться в окнах интерфейса этих элементов. 

8. Возврат значений параметра одного элемента, изменение и пересылка этого значения в другой элемент. Рассмотрим разные типы элементов и значений, и проведем тест на пересылку между разными типами элементов в разных окнах.

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

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

11. Попробуем связать и синхронизировать изменения значений элементов разных типов: например поля ввода с кнопками и слайдера. Допустим, чтобы при изменении значения одного элемента (ручного или программного), значение во втором элементе менялось соответствующе.

12. Попробуем программно переустановить границы диапазона слайдера и поля ввода с кнопками через функции обертки. Я не успел это протестировать, но что то подсказывает, что это получится. Впрочем, посмотрим.

13. Попробуем вернуть состояния элементов через функции обертки. Это заложено в функционал, но также, не успел протестировать. Поэтому посмотрим... Результат неизвестен.

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

15. Расскажу подробнее как ориентироваться и читать новую распечатку файла API.

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

Желтым цветом выделены темы которые уже рассмотрели.


Сегодня рассмотрим:

11. Синхронизация (связывание) изменения значений элементов разных типов: например поля ввода с кнопками и слайдера. Чтобы при изменении значения одного элемента (ручного или программного), значение во втором элементе менялось соответствующе.

12. Попробуем программно переустановить границы диапазона слайдера и поля ввода с кнопками через функции обертки. Я не успел это протестировать, но что то подсказывает, что это получится. Впрочем, посмотрим.

13. Попробуем вернуть состояния элементов через функции обертки. Это заложено в функционал, но также, не успел протестировать. Поэтому посмотрим... Результат неизвестен.

Документация по MQL5: Основы языка / Операторы / Оператор возврата return
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
  • www.mql5.com
Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Результат вычисления выражения возвращается...
 
Тема большая, много гифов и картинок. Занимает время...
 

11. Связывание параметров элементов разных типов.

Наблюдательный человек замечал, что во многооконном графическом интерфейсе разные элементы часто связаны значениями параметров, свойствами и состояниями. Например:

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

  • Введенный текст внезапно возникает в элементах других окон. 
  • Настройка регулируемая кнопками +/- меняет положение слайдера или цифры в поле. 
  • Текстовое поле транслирует символьную строку в ячейку таблицы другого окна.
  • Опция выпадающего списка переиначивает цвет или шрифт элементов.
  • Нажатый чекбокс запирает группу радиокнопок.
  • и т.д.

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

Можно подумать, где то проходит невидимая связь элементов. И она действительно есть. Но невидима она только для стороннего наблюдателя. Для разработчика она вполне очевидна и сегодня рассмотрим ее подробно.

1. Связь элементов имеет две стороны: 

  • Логическую   - любая программа имеет парамеры, значения которых прямо или косвенно зависят и переопределяют друг друга. У программ с графическим интерфейсом связь прослеживается визуально.
  • Техническую - все параметры связываются внутренними программными алгоритмами. 

Техническая реализация связей упрощается благодаря наличию графического движка. 

Поясню:

В обычном советнике каждый параметр придумывает, называет, хранит и обрабатывает пользователь. Это рутинная работа которую нельзя обойти. Однако в случае использования графического движка, элементы созданные в конструкторе автоматически получают параметр вместе с местом хранения и функцией обработки/возврата. В довесок, пользователь получает их свойства, как тип, диапазон, прошлое значение и т.д. Это значительно упрощает труд. Теоретически, можно использовать готовые параметры элементов GUI как остальные пользовательские параметры, связав их напрямую с торговой логикой. Например лот, трейлинг стоп, тейк профит и другие, брать не из собственных переменных, а у полей настроек отвечающих за их значения.  

Некоторые общие выводы:

1. Наличие графического элемента управления в программе = наличие готового программного параметра + его свойств + функции возврата/установки значения.

2. Чем больше элементов управления помещены в окна интерфейсной программы, тем больше параметров потециально участвуют в торговой логике и в вводе/выводе торговой информации.

3. Чем больше настроек и окон - тем выше контроль и  шире полоса вывода рыночных данных (без ущерба автоматизации).

4. Чем выше контроль и шире полоса вывода рыночных данных - тем лучше осведомленность трейдера.

5. Осведомленность помноженная на автоматизацию и контроль = масштабирование трейдерских возможностей.

Добавлю, что часто автоматизацию противопостовляют мануальному контролю. Мол, наличие графического интерфейса означает ручную торговлю. Но это не так. Программный интерфейс не исключает, а расширяет автоматизацию, добавляя к ней "градиент" - открывает три варианта: ручное управление, полуавтоматическую торговлю и автономный режим.

Все что нужно трейдеру - выбрать опцию.

Благо, для этого легко создать окно.

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


2. Перейдем к технической реализации связывания параметров элементов управления.

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

1. Откроем знакомое окно настроек:

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

   w_6_Settings_example_1();
   //------------------------------------------------



2. Откроем файл API и найдем элементы открытого окна внутри функции On_Gui_Event():




Напомню:   Все события элементов управления приходят в функцию On_Gui_Event();

В связи с этим, часть связей параметров пропишем внутри этой функциии, а часть вне ее тела


1. Установим связь между полем с кнопками (S_EDIT) "Spin the value" и слайдером (H_SLIDER) "Roll the value":

  • Находим поле с кнопками "Spin the value" в файле API.
  • Прописываем отсылку значения в слайдер "Roll the value".

*(важная заметка. функции элементов и окон нужно перенести из файла UIDATA в низ файла API, чтобы работал интеллисенс. в след.версии они будут печататься там.)
case Settings_example_1___Spin_the_value:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the value is set?
               //------------------------------------------------------------------------------------------------------
               //Min value:  NOT SET  |   Max value:  NOT SET  |   V_step:  1.7  |   Default value:  468.99  |  Digits: 3
               //------------------------------------------------------------------------------------------------------
               w6_i_p3_H_SLIDER_Roll_the_value((int)value);
               
                 
               Alert("S_EDIT Spin_the_value    value entered: ",value);
               //------------------------------------------------------------------------------------------------------
               //Your comment: Send the value to Slider.
               //------------------------------------------------------------------------------------------------------
               break;

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

(*Важно - слайдер может двигаться только в своем диапазоне (в данном случае, от 0 до 100). В случае выхода за пределы, значение не меняется но выводится ошибка в журнал.)


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

3. Сделаем реверс ролей. Слайдер будет управлять значением в поле ввода:

  • Находим слайдер "Roll the value" в файле API.
  • Прописываем отсылку значения в поле с кнопками "Spin the value".
case Settings_example_1___Roll_the_value:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the slider's handle is moved?
               //------------------------------------------------------------------------------------------------------
               //Min value:  0  |   Max value:  100  |   V_step:  1  |   Default value:  75  |  Digits: Integer value
               //------------------------------------------------------------------------------------------------------
               w6_d_p5_S_EDIT_Spin_the_value((double)value);
               
               //Alert("H_SLIDER Roll_the_value    value entered: ",value);
               //------------------------------------------------------------------------------------------------------
               //Your comment: Send the value to Spin edit.
               //------------------------------------------------------------------------------------------------------
               break;

Результат: При перемещении ручки слайдера, поле с кнопками меняет значение синхронно.


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


4. Пропишем взаимное управление слайдера и поля с кнопками друг другом:

  • Находим оба элемента в файле API.
  • Прописываем отсылку значения. Поле с кнопками посылает свое значение слайдеру, слайдер посылает свое значение полю с кнопками.

case Settings_example_1___Spin_the_value:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the value is set?
               //------------------------------------------------------------------------------------------------------
               //Min value:  NOT SET  |   Max value:  NOT SET  |   V_step:  1.7  |   Default value:  468.99  |  Digits: 3
               //------------------------------------------------------------------------------------------------------
               w6_i_p3_H_SLIDER_Roll_the_value((int)value);
               
                 
               Alert("S_EDIT Spin_the_value    value entered: ",value);
               //------------------------------------------------------------------------------------------------------
               //Your comment: Send the value to Slider.
               //------------------------------------------------------------------------------------------------------
               break;





case Settings_example_1___Roll_the_value:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the slider's handle is moved?
               //------------------------------------------------------------------------------------------------------
               //Min value:  0  |   Max value:  100  |   V_step:  1  |   Default value:  75  |  Digits: Integer value
               //------------------------------------------------------------------------------------------------------
               w6_d_p5_S_EDIT_Spin_the_value((double)value);
               
               Alert("H_SLIDER Roll_the_value    value entered: ",value);
               //------------------------------------------------------------------------------------------------------
               //Your comment: Send the value to Spin edit.
               //------------------------------------------------------------------------------------------------------
               break;

Результат: Слайдер и поля ввода одновременно управляют друг другом.

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


Завтра опубликую вторую часть этой темы с другими элементами.

 

Это потрясающий материал! Я планирую изучить эту тему более подробно, когда появится время. Я думал, что моя работа расширяет границы графического интерфейса mt4, но ваша работа - это новый уровень.


 
Dennis Jorgenson #:

Это потрясающий материал! Я планирую изучить эту тему более подробно, когда появится время. Я думал, что моя работа расширяет границы графического интерфейса mt4, но ваша работа - это новый уровень.


Большое спасибо за добрые слова!

 

11. Связывание параметров элементов разных типов.

Продолжение темы.

Часть 2.

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

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

1. Сделаем так, чтобы верхний чекбокс запирал и отпирал чекбокс стоящий ниже:


Для этого:

1. Найдем чекбокс "Set an option" в файле API.

2. Пропишем вызов функции чекбокса "Set another option" который должен запираться/отпираться.

//===========================================================================================================================
//WINDOW          :---: Settings example 1 | #: 6 | PFX: w_6
//                |   |
//GET/SET         :---: int w_6_Settings_example_1(int value = get_i, int Property = 0)
//----------------|   |------------------------------------------------------------------------------------------------------
//ELEMENT         :---: TYPE: CHECKBOX | NAME: Set an option | PAR_TYPE: int | INIT STATE: OFF | PFX: w6
//                |   |------------------------------------------------------------------------------------------------------
//LOCATION        :---: Window's Main Frame 
//----------------|   |------------------------------------------------------------------------------------------------------
//G/S PROPERTIES  :---: PFX: p7_ | PROPS: NONE
//                |   |------------------------------------------------------------------------------------------------------
//G/S ACTIONS     :---: p7_ON | p7_OFF | p7_LOCK_ON | p7_LOCK_OFF | p7_GET_STATE |
//----------------|   |------------------------------------------------------------------------------------------------------
//                |   |
//GET/SET CALL    :---: int w6_i_p7_CHECKBOX_Set_an_option(int value = none, int Property = 0)
//---------------------------------------------------------------------------------------------------------------------------
  
case Settings_example_1___Set_an_option:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the checkbox is checked or unchecked?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                //1. Lock the "Set another option" checkbox in the state ON.
                case checked:    w6_i_p7_CHECKBOX_Set_another_option(p7_LOCK_ON);   break;
  
                //2. Unlock "Set another option" checkbox in the state ON.
                case unchecked:  w6_i_p7_CHECKBOX_Set_another_option(p7_ON);        break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment: 
               //------------------------------------------------------------------------------------------------------
               break;

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

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


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

case Settings_example_1___Set_an_option:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the checkbox is checked or unchecked? 
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                //Lock both checkboxes----
                case checked:    w6_i_p7_CHECKBOX_Set_another_option(p7_LOCK_ON);  
                                 w6_i_p7_CHECKBOX_And_another_option(p7_LOCK_ON);
                break;

                //Unlock both checkboxes---
                case unchecked:  w6_i_p7_CHECKBOX_Set_another_option(p7_ON); 
                                 w6_i_p7_CHECKBOX_And_another_option(p7_ON);  
                break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;

Результат: чекбокс запирает и отпирает два нижестоящих чекбокса:


Так это происходило в динамике:

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


3. Теперь решим задачу изображенную на схеме ниже:   чекбоксы должны запирать и отпирать выпадающие списки напротив них.  


Для этого:

  • Нужно найти эти чекбоксы в файле API.
  • Прописать строки запирания/отпирания целевых элементов.

case Settings_example_1___Set_another_option:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the checkbox is checked or unchecked?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                //Locking the element---
                case checked:    w6_s_p6_D_LIST_D_LIST_1(p6_LOCK);   break;
                
                //Unlocking the element---
                case unchecked:  w6_s_p6_D_LIST_D_LIST_1(p6_UNLOCK); break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_1___And_another_option:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the checkbox is checked or unchecked?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                //Locking the element---
                case checked:    w6_s_p6_C_LIST_C_LIST_1(p6_LOCK);   break;
                
                //Unlocking the element---
                case unchecked:  w6_s_p6_C_LIST_C_LIST_1(p6_UNLOCK); break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;

Результат: чекбоксы запирают выпадающие списки, а сами запираются главным чекбоксом:

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


4. Перейдем к решению следующей задачи: выпадающие списки должны траслировать выбранное пользователем значение в поле другого окна.


Для этого:

  • Необходимо найти выпадающие списки в файле API.
  • Прописать передачу значения в текстовое поле другого окна на событии пользовательского выбора.
case Settings_example_1___D_LIST_1:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when an option selected?
               //------------------------------------------------------------------------------------------------------
               if(selected_option == "L_ITEM  1"){}
               if(selected_option == "L_ITEM  2"){}
               if(selected_option == "L_ITEM  3"){}
               if(selected_option == "L_ITEM  4"){}
               if(selected_option == "L_ITEM  5"){}
               if(selected_option == "L_ITEM  6"){}
               if(selected_option == "L_ITEM  7"){}
               if(selected_option == "L_ITEM  8"){}
               if(selected_option == "L_ITEM  9"){}
               if(selected_option == "L_ITEM  10"){}
               if(selected_option == "L_ITEM  11"){}
               if(selected_option == "L_ITEM  12"){}
               if(selected_option == "L_ITEM  13"){}
               if(selected_option == "L_ITEM  14"){}
               if(selected_option == "L_ITEM  16"){}
               if(selected_option == "L_ITEM  17"){}
               if(selected_option == "L_ITEM  18"){}
               if(selected_option == "L_ITEM  19"){}
               if(selected_option == "L_ITEM  20"){}
  
               //-----------------------------------
               //Send user's choice to textbox "Comment 1" in another window.
               w7_s_p4_EDIT_Comment_1(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_1___C_LIST_1:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when an option selected?
               //------------------------------------------------------------------------------------------------------
               if(selected_option == "Times_New_Roman"){}
               if(selected_option == "Arial"){}
               if(selected_option == "Tahoma"){}
               if(selected_option == "Dali"){}
               if(selected_option == "BatangChe"){}
               if(selected_option == "Consolas"){}
               if(selected_option == "Courier"){}
               if(selected_option == "Courier_New"){}
               if(selected_option == "DFKai_SB"){}
               if(selected_option == "DotumChe"){}
               if(selected_option == "FangSong"){}
               if(selected_option == "Fixedsys"){}
               if(selected_option == "GulimChe"){}
               if(selected_option == "GungsuhChe"){}
               if(selected_option == "KaiTi"){}
  

               //Send user's choice to textbox "Comment 2" in another window.
               w7_s_p4_EDIT_Comment_2(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;


*Результат: оба выпадающих списка успешно посылают свои значения в поля ввода в противоположном окне:

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


5. Следующая задача показана на этой схеме:   Необходимо, чтобы переключающиеся радиокнопки посылали свое имя в поля ввода напротив.



Для этого:

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

*Важная заметка: радиокнопки переключаются так как к ним был применен оператор SWITCH в KIB-коде. Поэтому, они имеют один общий параметр на всех и находятся в файле API в одном кейсе.

//===========================================================================================================================
//WINDOW          :---: Settings example 2 | #: 7 | PFX: w_7
//                |   |
//GET/SET         :---: int w_7_Settings_example_2(int value = get_i, int Property = 0)
//----------------|   |------------------------------------------------------------------------------------------------------
//GROUP           :---: TYPE: R_BUTTONS | NAME: Some options group | PAR_TYPE: string | INIT OPTION: Choose option 1 | PFX: w7
//                |   |------------------------------------------------------------------------------------------------------
//LOCATION        :---: Window's Main Frame 
//----------------|   |------------------------------------------------------------------------------------------------------
//G/S PROPERTIES  :---: PFX: p7_ | PROPS: NONE
//                |   |------------------------------------------------------------------------------------------------------
//G/S ACTIONS     :---: p7_ON | p7_OFF | p7_LOCK_ON | p7_LOCK_OFF | p7_GET_STATE |
//----------------|   |------------------------------------------------------------------------------------------------------
//                |   |
//GET/SET CALL    :---: string w7_s_p7_R_BUTTON_Some_options_group(string value = get_s, int Property = 0)
//---------------------------------------------------------------------------------------------------------------------------
  
case Settings_example_2___Some_options_group:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when an option selected?
               //------------------------------------------------------------------------------------------------------
               if(selected_option == "Choose option 1"){}
               if(selected_option == "Choose option 2"){}
               if(selected_option == "Choose option 3"){}
              
              
               //We send user's choise into the textbox "Comment 3".
               w7_s_p4_EDIT_Comment_3(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;

Результат: Переключение кнопок вызывает смену текста в поле ввода. *С этим вариантом имеется небольшая техническая проблема. Исправление в след.версии.

Вторая часть завершена.

В третьей части поработаем с таблицей.

 

Заключительная часть темы связывания параметров.

Передадим значения параметров элементов ячейкам таблицы.

Схема:



Решение: 

  • Найдем нужные элементы в файле API.
  • В каждом пропишем передачу значения в назначенную ячейку таблицы.

case Settings_example_1___D_LIST_1:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when an option selected?
               //------------------------------------------------------------------------------------------------------
               if(selected_option == "L_ITEM  1"){}
               if(selected_option == "L_ITEM  2"){}
               if(selected_option == "L_ITEM  3"){}
               if(selected_option == "L_ITEM  4"){}
               if(selected_option == "L_ITEM  5"){}
               if(selected_option == "L_ITEM  6"){}
               if(selected_option == "L_ITEM  7"){}
               if(selected_option == "L_ITEM  8"){}
               if(selected_option == "L_ITEM  9"){}
               if(selected_option == "L_ITEM  10"){}
               if(selected_option == "L_ITEM  11"){}
               if(selected_option == "L_ITEM  12"){}
               if(selected_option == "L_ITEM  13"){}
               if(selected_option == "L_ITEM  14"){}
               if(selected_option == "L_ITEM  16"){}
               if(selected_option == "L_ITEM  17"){}
               if(selected_option == "L_ITEM  18"){}
               if(selected_option == "L_ITEM  19"){}
               if(selected_option == "L_ITEM  20"){}
  
               //-----------------------------------
               //Send user's choise to the cell "CELL_Account_name__Value"
               w8_s_p4_CELL_Account_name__Value(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_1___C_LIST_1:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when an option selected?
               //------------------------------------------------------------------------------------------------------
               if(selected_option == "Times_New_Roman"){}
               if(selected_option == "Arial"){}
               if(selected_option == "Tahoma"){}
               if(selected_option == "Dali"){}
               if(selected_option == "BatangChe"){}
               if(selected_option == "Consolas"){}
               if(selected_option == "Courier"){}
               if(selected_option == "Courier_New"){}
               if(selected_option == "DFKai_SB"){}
               if(selected_option == "DotumChe"){}
               if(selected_option == "FangSong"){}
               if(selected_option == "Fixedsys"){}
               if(selected_option == "GulimChe"){}
               if(selected_option == "GungsuhChe"){}
               if(selected_option == "KaiTi"){}
  

               //Send user's choice to textbox "Comment 2" in another window.
               w8_s_p4_CELL_Leverage__Value(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_1___Roll_the_value:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the slider's handle is moved?
               //------------------------------------------------------------------------------------------------------
               //Min value:  0  |   Max value:  100  |   V_step:  1  |   Default value:  75  |  Digits: Integer value
               //------------------------------------------------------------------------------------------------------

               //Sending the slider's value into the table cell.
               w8_s_p4_CELL_Account_balance__Value(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_2___Comment_1:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the text is entered?
               //------------------------------------------------------------------------------------------------------
               
               //Sending textbox's text into the cell
               w8_s_p4_CELL_Account_number__Value(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_2___Comment_2:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the text is entered?
               //------------------------------------------------------------------------------------------------------
               
               //Sending textbox's text into the cell
               w8_s_p4_CELL_Account_server__Value(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_2___Comment_3:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the text is entered?
               //------------------------------------------------------------------------------------------------------
      
               //Sending textbox's text into the cell
               w8_s_p4_CELL_Account_currency__Value(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_2___C_LIST_1:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when an option selected?
               //------------------------------------------------------------------------------------------------------
               if(selected_option == "Times_New_Roman"){}
               if(selected_option == "Arial"){}
               if(selected_option == "Tahoma"){}
               if(selected_option == "Dali"){}
               if(selected_option == "BatangChe"){}
               if(selected_option == "Consolas"){}
               if(selected_option == "Courier"){}
               if(selected_option == "Courier_New"){}
               if(selected_option == "DFKai_SB"){}
               if(selected_option == "DotumChe"){}
               if(selected_option == "FangSong"){}
               if(selected_option == "Fixedsys"){}
               if(selected_option == "GulimChe"){}
               if(selected_option == "GungsuhChe"){}
               if(selected_option == "KaiTi"){}
  

               //Sending C_LIST value into the cell.
               w8_s_p4_CELL_Account_profit__Value(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
case Settings_example_2___D_LIST_1:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when an option selected?
               //------------------------------------------------------------------------------------------------------
               if(selected_option == "L_ITEM  1"){}
               if(selected_option == "L_ITEM  2"){}
               if(selected_option == "L_ITEM  3"){}
               if(selected_option == "L_ITEM  4"){}
               if(selected_option == "L_ITEM  5"){}
               if(selected_option == "L_ITEM  6"){}
               if(selected_option == "L_ITEM  7"){}
               if(selected_option == "L_ITEM  8"){}
               if(selected_option == "L_ITEM  9"){}
               if(selected_option == "L_ITEM  10"){}
               if(selected_option == "L_ITEM  11"){}
               if(selected_option == "L_ITEM  12"){}
               if(selected_option == "L_ITEM  13"){}
               if(selected_option == "L_ITEM  14"){}
               if(selected_option == "L_ITEM  16"){}
               if(selected_option == "L_ITEM  17"){}
               if(selected_option == "L_ITEM  18"){}
               if(selected_option == "L_ITEM  19"){}
               if(selected_option == "L_ITEM  20"){}
  

               //Sending the D_LIST value into the cell.
               w8_s_p4_CELL_Account_equity__Value(value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;

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


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


На этом тема связывания параметров элементов завершена.

 

Осталось рассмотреть следующие темы:

12. Программное получение/установка границ значений слайдера и поля с кнопками (_V_MIN, _V_MAX, _V_STEP, _DIGITS).

13. Запрос состояния элементов (_GET_STATE).

14. Связывание цвета текста и рамок с расставленными границами значений.

15. Ориентирование в файле API.


Добавлю тему:

16. Реализация программной логики появления окон сообщений и предупреждений.

 
Продолжим с новой страницы.