Ошибки, баги, вопросы - страница 2394

 
В других компиляторах есть такая возможность?
void OnInit()
{
  OnInit2(); // Пропишите внизу OnInit
}

#define OnInit OnInit2
сейчас компилятор выдает
'OnInit2' - function not defined        Test3.mq5       3       3
1 error(s), 0 warning(s)                2       1


А хотелось бы, чтобы выдавал

'OnInit2' - function not defined        Test3.mq5       3       3 Пропишите внизу OnInit
1 error(s), 0 warning(s)                2       1
 
fxsaber:
В других компиляторах есть такая возможность?сейчас компилятор выдает


А хотелось бы, чтобы выдавал

в компиляторах вряд ли, в интерпретаторах скорее всего возможно, в компиляторах обычно применяется статическое связывание указателей на вызовы ф-ций или переменных (вроде так должно звучать? ), т.е. на этапе компиляции будут вычислены все смещения указателей

в Вашем примере все по старинке, #define  и #ifndef ( _DEBUG ? )

 
Igor Makanu:

в компиляторах вряд ли, в интерпретаторах скорее всего возможно, в компиляторах обычно применяется статическое связывание указателей на вызовы ф-ций или переменных (вроде так должно звучать? ), т.е. на этапе компиляции будут вычислены все смещения указателей

в Вашем примере все по старинке, #define  и #ifndef ( _DEBUG ? )

Хотел только, чтобы компилятор сообщение об ошибке дополнял комментарием строки.

 
Vjacheslav Lapaev:

тоже сталкивался. не скажу, что в последней версии, но в предыдущих - точно. в основном в индикаторах, где работаю с объектами (надписи и т.п.) . возможно,это связано c большим числом индикаторных массивов. в среднем, около 40, как "INDICATOR_DATA", так и "INDICATOR_CALCULATIONS". решение тоже было одно - принудительное удаление терминала из списка программ в диспетчере задач. индикаторы, кстати, если память не изменяет, в подобных ситуациях даже после удачной компиляции в терминале не обновлялись. но тут не уверен. проще было из диспетчера задача мт удалить.

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

Спасибо за совет! Жалко конечно, что программа нестабильно работает, в версии за декабрь такой ошибки не было.
 
Ilyas:

Не вникал в представленный код, попробую угадать - проблема в том, что оба EA работают с одним и тем же графическим ресурсом.

это пример использования стандартной библиотеки class CAppDialog

если использовать этот класс, то при переключении чартов панелька всегда вызывается метод Minimize()

я не захотел разбираться, просто написал свой OnClickButtonMinMax(), весьма криво, но работал без проблем, вот выдрал из своего исходника

CAppDialog::OnClickButtonMinMax()
  {
   if(Width()<200) Minimized_state=false;
   if(Minimized_state)
     {
      Minimize();
     }
   else
     {
      Maximize();
      ObjectSet(TS1.Name()+"Label",OBJPROP_BACK,true);
      ObjectSet(TS2.Name()+"Label",OBJPROP_BACK,true);
      ObjectSet(CP.Name()+"Label",OBJPROP_BACK,true);
     }
  }

в классе CAppDialog какой баг еще, после Minimize() и Maximize() изменяется свойство OBJPROP_BACK  класса CCheckBox , и чекбоксы становятся с границей "квадратика", тож в этом коде по быстрому устранил ObjectSet(TS1.Name()+"Label",OBJPROP_BACK,true); ...

 
Vjacheslav Lapaev:
Привет!

Дано: два графика в терминале мт5,например, EURUSD H1,EURUSD H1. Пусть графики имеют номера 1 и 2, соответственно, при нумерации слева - направо.

При размещение "панели" (практически любой) на графике, который, имеет номер 1, после перехода на график 2 и возврате на 1 график, панель минимизируется - сворачивается в левый верхний угол.

В тоже время, если "панель" поместить на график 2, при существующем, естественно, графике 1, то при переходе на 1 график и возврате на график 2, минимизации - сворачивания "панели" в левый верхний угол не происходит :).

Кто может пояснить в чём суть и как с этим бороться?
   

Удалил свой предыдущий ответ

Окно сворачивается, потому что оно не помещается на чарте.
Выйдете из режима "чарт на всё окно терминала", вы увидите реальные размеры чартов.

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

 
Igor Makanu:

это пример использования стандартной библиотеки class CAppDialog

если использовать этот класс, то при переключении чартов панелька всегда вызывается метод Minimize()

я не захотел разбираться, просто написал свой OnClickButtonMinMax(), весьма криво, но работал без проблем, вот выдрал из своего исходника

в классе CAppDialog какой баг еще, после Minimize() и Maximize() изменяется свойство OBJPROP_BACK  класса CCheckBox , и чекбоксы становятся с границей "квадратика", тож в этом коде по быстрому устранил ObjectSet(TS1.Name()+"Label",OBJPROP_BACK,true); ...

Вы правы.

Изучил представленный код и изменил свой ответ.

Проблема в том, что в MDI приложении, только одно активное окно развёрнуто на максимальный размер, остальные как бы лежат за максимальным и имеют "обычный" размер.

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

EA ловит изменение размера чарта, определяет, что панель не умещается и минимизирует окно.

Мы обдумаем и возможно поменяем это поведение в СБ.

 
Ilyas:

Вы правы.

Изучил представленный код и изменил свой ответ.

Проблема в том, что в MDI приложении, только одно активное окно развёрнуто на максимальный размер, остальные как бы лежат за максимальным и имеют "обычный" размер.

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

EA ловит изменение размера чарта, определяет, что панель не умещается и минимизирует окно.

Мы обдумаем и возможно поменяем это поведение в СБ.

вот воспроизвел свой код без всего лишнего, но к сожалению у меня код только под МТ4 - я под МТ4 имею практику написания, а вот под МТ5 мало пишу, но думаю у Вас библиотеки одинаковые

Файлы:
tstpanel.mq4  12 kb
 
Ilyas:

Удалил свой предыдущий ответ

Окно сворачивается, потому что оно не помещается на чарте.
Выйдете из режима "чарт на всё окно терминала", вы увидите реальные размеры чартов.

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

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

и почему при размещении во втором окне и при переходе в него из первого окна во время работы при развёрнутых графиках - панель не сворачивается?

 
Igor Makanu:

это пример использования стандартной библиотеки class CAppDialog

если использовать этот класс, то при переключении чартов панелька всегда вызывается метод Minimize()

я не захотел разбираться, просто написал свой OnClickButtonMinMax(), весьма криво, но работал без проблем, вот выдрал из своего исходника

в классе CAppDialog какой баг еще, после Minimize() и Maximize() изменяется свойство OBJPROP_BACK  класса CCheckBox , и чекбоксы становятся с границей "квадратика", тож в этом коде по быстрому устранил ObjectSet(TS1.Name()+"Label",OBJPROP_BACK,true); ...

отредактировал библиотеку с учётом вашего варианта ограничения размера панели, во избежание её сворачивания при переходе из другого окна, всё получилось. спасибо.