Обсуждение статьи "Как создать графическую панель любой сложности и как это работает" - страница 6

 
Панель лучше использовать из другого языка на мт5 будет чисто зависеть от терминала и графика
 
Vitaliy Davydov #:

Здравствуйте!

Подскажите пожалуйста, почему ваша панель прекрасно работает на реальном графике, но не работает в тестере стратегий?

То есть события нажатий кнопок, к примеру, не обрабатываются.

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

Заранее спасибо!

Пару лет назад выкладывал работающее решение с кнопками. Но поля Edit в тестере МТ5 не работают. Хотя можно добавить рядом с полем Edit маленькие кнопки +/- и править через них. Но там свои нюансы будут.
 
ON_MOUSE_FOCUS_KILL судя по всему никак не используется. При добавлении в Map ничего не происходит. Так же можно закомментировать ON_MOUSE_FOCUS_KILL и компилятор пропустит. 
 

Зравствуйте!

Создаю панель унаследованную от CDialog (либо от CWndContainer, без разницы).

Если создаю в основном окне графика, то все работает - панель перемещается мышью и закрывается кнопкой закрытия.

Если же создаю панель в подокне, то не работает ничего - панель неподвижна, на кнопку закрытия не реагирует.

Вопрос - как заставить панель нормально реагировать на события графика  в подокне?

 
Vasiliy Pushkaryov #:
Пару лет назад выкладывал работающее решение с кнопками. Но поля Edit в тестере МТ5 не работают. Хотя можно добавить рядом с полем Edit маленькие кнопки +/- и править через них. Но там свои нюансы будут.

Добрый день!

Спасибо, разобрался.

Теперь другие проблемы - все эти панели из стандартной библиотеки,

абсолютно нефункциональны в тестере МТ4 в режиме визуализации тестирования.

Есть какое-нибудь глобальное решение данной проблемы, чтобы не устраивать пляски с бубном по каждому контролу?

 
Vitaliy Davydov #:

Добрый день!

Спасибо, разобрался.

Теперь другие проблемы - все эти панели из стандартной библиотеки,

абсолютно нефункциональны в тестере МТ4 в режиме визуализации тестирования.

Есть какое-нибудь глобальное решение данной проблемы, чтобы не устраивать пляски с бубном по каждому контролу?

Что значит не функциональны? У меня в тестере МТ4 они свои функции выполняют.

Приводил пример, когда унаследовался от CButton и добавил туда функцию cMyButton::isButtonPushed() для работы с тестером.

Тоже самое я себе сделал для CEdit, CCheckBox и использую потом всегда своих наследников. Это разовая работа.

В файле TestPush был образец функции checkPushingButttons() :

void OnTick()
{
    if(MQLInfoInteger(MQL_VISUAL_MODE)) ExtDialog.checkPushingButttons();
}

//+------------------------------------------------------------------------------------------------------------------+
//| Для тестера и OnTick. Проверим нажатие кнопки (или объекта)
//+------------------------------------------------------------------------------------------------------------------+
void CAppWindowCorrectMinimization::checkPushingButttons()
{
   if(m_button1.isButtonPushed())    print1();
   if(m_button2.isButtonPushed())    print2();
}


Вот из моего работающего кода:

//+------------------------------------------------------------------------------------------------------------------+
//| Для тестера и OnTick. Проверим нажатие кнопки (или объекта)
//+------------------------------------------------------------------------------------------------------------------+
void cInterface::checkPushingButttons()
{
  if(btnOnOff.isButtonPushed())    OnClickOnOff();
  if(btnLong.isButtonPushed())     OnClickLong();
  if(btnShort.isButtonPushed())    OnClickShort();

  if(btnCloseOff.isButtonPushed()) OnClickCloseOff();
  if(btnProtocol.isButtonPushed()) OnClickProtocol();
  if(btnOpposMA6.isButtonPushed()) OnClickOpposMA6();

  if(editMA2plus.isEditChanged())  OnEditMA2plus();
  if(editPunct.isEditChanged())    OnEditPuncture();

Т.е. в конце концов разница с работой без тестера и в тестере сводится к добавлению одной функции checkPushingButttons(), где на каждый контрол добавим строку, и проверим через тик нажатие или ввод.

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

 

класс CAppDialog глючный. 

После хотя бы однократного использования для ВСЕХ новых графиков свойство CHART_EVENT_MOUSE_MOVE становится равным false.

Как вернуть true по умолчанию??

Причина обращения: