![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Была поставлена задача реализовать программное взаимодействие пользовательского кода с графическим интерфейсом программы.
По задумке:
//----------------------------------------------------------------------------------
Однако, до этого релиза, пользователь мог лишь получать события интерактивных элементов в подлюченный API файл.
Важно подчеркнуть: у пользователя не было многих, абсолютно необходимых программных возможностей.
Перечислю:
В этом обновлении решены почти все поставленные задачи.
Перечислю:Благодаря возможностям программного управления реализуются недоступные ранее вещи:
1. Рассылка значений. Получение значения одного элемента и пересылка в другие элементы в том же, или другом окне.
2. Программное открытие окон предупреждений и диалога. Например, в ситуации когда необходимо вывести срочное сообщение или рекомендацию пользователю.
3. Получение общей картины настроек и статуса исполнения через запросы параметров элементов. Можно использовать как дополнение к анализу других программных параметров.
4. Динамичная переустановка настроек программы не прерывающая процесс работы.
5. Благодаря возможностям изменения цветов оснований, текста и рамок (рамок пока нет), интерфейс становится более интерактивным и информативным. Например, при перемотке значения и попадания его в зону риска, в поле ввода с кнопками может сигнализировать пользователю об опасности красным цветом своего основания или текста. Теперь это легко реализовать. Тоже самое касается полосы слайдера. В зоне опасных значений, можно программно менять цвет полосы. Получается интерактивно, информативно и практично.
На данный момент я не до конца осознал все грядущие возможности и уверен, многое впереди.
Далее, перейдем к практической части разбора новой версии.
Как оказалось, практическая часть разбора достаточно обширна и ее охват потребует время. Подробно и доступно, с комментариями, картинками и гифами, расскажу и покажу новые возможности. Возможно, придется разделить подачу материала на два дня - сегодня и завтра. Ничего страшного, понимание от этого улучшиться. Отдохнуть тоже нужно.
План разбора функциональных возможностей новой версии движка:
1. Напомню, что новые папки и файлы нужно установить в МЕ после полного стирания предыдущих. Замену делать не нужно.
2. Для работы нам потребуются открыть файлы (1) EA Shell v1.mq5 и API.mqh. Остальные файлы открывать нет необходимости. Будем использовать прежний интерфейс и знакомые окна из Demo project 1.mqh. Первый файл должен быть в папке Экспертов (думаю он там уже есть), а второй можно найти здесь:
Файл UIDATA.mqh и API.mqh в этой папке уже содержат все неоходимое. Генерировать новые файлы в конструкторе не нужно.
3. Основная работа будет проходить в файле (1) EA Shell v1.mq5, в функции _OnInit() и _OnTimer, но иногда будем заглядывать в файл API.mqh. Если есть любопытство, можно открыть файл UIDATA.mqh и посмотреть как выглядят функции обертки окон и элементов. Они напечатаны в самом низу. В остальном этот файл не нужен для работы и его можно закрыть.
Темы которые рассмотрим:
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.
Пока все, но дополнения возможны по ходу дела.
Начнем рассмотрение тем упомянутых выше.
1. Ориентирование в списке интеллисенс и выбор функции нужного окна:
Вводим w_, появляется список функций окон пользовательского интерфейса этого проекта.
2. Ориентирование в списке интеллисенс и выбор нужного элемента из выбранного окна:
Выбрав окно, смотрим на его номер.
Стираем черточку после w и печатаем его номер.
Это префикс для списка всех интерактивных элементов внутри этого окна:
//-------------------------------------------------------------------------------------------------------------------------------------------
Гиф показывает легкость и динамику этого процесса:
Далее, рассмотрим открытие и закрытие окон графического интерфейса.
3. Открытие и закрытие окон:
Так это выглядит в процессе:
Продолжим разбор тем завтра, со свежими силами.
选择窗口后,我们查看其编号。
Мы стираем тире после буквы w и печатаем ее номер.
Это префикс всех списков взаимодействия в этом окне:
Что такое p1~p7? Понятно. Это атрибут
Что такое p1~p7? Понятно. Это атрибут
Графический интерфейс пока не работает в тестере.
Я еще не изучал этот вопрос, потому что у меня не было времени. Когда я закончу писать базовую функциональность, я посмотрю, можно ли что-то с этим сделать.