Библиотеки: EasyAndFastGUI - библиотека для создания графических интерфейсов - страница 18

 
Marco vd Heijden:

Вначале он был разработан на MQL4 и MQL5, но последние несколько примеров - на MQL5.

Это не означает, что его нельзя заставить работать на MQL4.

Код обычно нуждается в нескольких небольших корректировках.

Я пытался модифицировать его, но не смог. Сложные файлы MT5 .mqh разочаровали меня, так много переменных и объектов!

 
17334708:

Я пытался модифицировать его, но не смог. Сложные файлы MT5 .mqh разочаровали меня, так много переменных и объектов!

Да, это требует некоторой работы, лучший способ - переименовать переменные цикла, например, когда вы получаете предупреждение о переменной i, вы можете переименовать i в i1 в этом цикле, а в следующем цикле - в i2 и i3 и так далее.

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

 
Но многие из них связаны между собой. Изменение цикла или переменных становится фантастически перегруженной работой. спасибо за помощь.
 
Только если вам нужно все, а не один элемент.
 
Можно ли использовать эту библиотеку в MQL4?
 
Что я делал:
панель, в которой несколько комбобоксов и полей ввода цифр. Есть один главный комбобокс, от которого зависят остальные поля

Как это должно работать:
когда меняется значение главного комбобокса, то остальные поля ввода и комбобоксы: что-то скрывается, что-то появляется, что-то меняет свое местоположение (X,Y)

Какие способы пробовал я:
1) - при перевыборе значения в главном комбобоксе - все лишние элементы удаляются (Delete()), а потом заново создаются (Create...()). Итог - при новой отрисовке элементов - когда нажимаешь на элемент перерисованного комбобокса - возникает - array out of range возникает при доступе к массиву элементов формы. Пробовал "закостылить" ошибку и добавил в месте ошибки проверку на  размер массива (чтобы принудительно не выходил в цикле за массив), теперь, когда сюда доходит, то форма просто "зависает".

2) - пробовал способ 1), но при этом добавил в WndContainer  функцию, которая написана в данной ветке, в начале "DeleteElementsFromArray" - ситуация не изменилась

3) - пробовал отрисовать все элементы с одними и теми же значениями X,Y (все элементы в одной точке), далее сразу скрываю их (Hide()), далее при необходимости меняю им X,Y (XGap(...), YGap(...)) и отрисовываю (Update(true); Show()) - тут другая проблема - часть элементов не прячется после скрытия, а другая часть - теряет свой LabelText (его просто визуально нет)


Что посоветуете?
 
Mikhail Mitin:

добавил в WndContainer  функцию, которая написана в данной ветке, в начале "DeleteElementsFromArray" - ситуация не изменилась


Я же написал, для простых элементов. Комбобокс - не простой ) В нынешнем варианте должны и сложные удаляться, но еще не тестил по-моему, да и менять там много нужно )

А для скрытия я добавил элементам свойство m_is_hiden и в CWndEvents::Show(const uint window_index); элементы с true пропускаются

 

Привет, ребята,

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

практически невозможно обойтись без Strategy Tester.

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

Было бы очень полезно, если бы мы могли правильно тестировать вещи в ST!


1. Говорила ли команда разработчиков MetaTrader где-нибудь на форуме о том, почему void OnChartEvent не срабатывает в ST?

2. Есть ли возможность найти обходной путь?


Будьте здоровы,
Марсель

 

Макрос в файле Defines.mqh

#define TO_STRING(A) #A

не совместим с Alglib {ap.mqh)

class CSerializer
  {
   //--- enumeration
   enum SMODE { DEFAULT,ALLOC,TO_STRING,FROM_STRING };

Пришлось переименовать.

 

После установки обновления платформы на 2132 появились ошибки при компиляции:

  • "WndEvents.mqh" - 'CWndContainer::~CWndContainer' - cannot access protected member function WndEvents.mqh 11 27
  • 'CWndEvents::~CWndEvents' - cannot access protected member function WndCreate.mqh 10 27


Как исправить:

  • в файле "WndContainer.mqh" у конструктора и деструктора "CWndContainer" заменить "protected" на "public"
  • в файле "WndEvents.mqh" у конструктора и деструктора "CWndCreate" заменить "protected" на "public"
  • в файле "WndCreate.mqh" у конструктора и деструктора "CWndCreate" заменить "protected" на "public"