Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 251

 

Здравствуйте. Хочу написать торговую панель для советника в двух версиях mql4 и mql5. С графическими объектами пока знаком мало, для создания подвижного меню использовал пример из класса CLabel стандартной библиотеки. В mql5 меню работает замечательно, а в mql4 нет. При смене периода графика объекты меню дублируются, их расположение относительно друг друга меняется. Наверно в mql4 в классе CLabel не хватает каких-то методов, которые есть в mql5? Может подскажите что нужно дополнительно прописать в этом классе, чтобы таких проблем не возникало. 

Также в коде примера к классу CLabel мне не ясно,ч что выполняют эти строки:

EVENT_MAP_BEGIN(CControlsDialog) 
  
EVENT_MAP_END(CAppDialog)
 
Aleksandr Teleguz:

Здравствуйте. Хочу написать торговую панель для советника в двух версиях mql4 и mql5. С графическими объектами пока знаком мало, для создания подвижного меню использовал пример из класса CLabel стандартной библиотеки. В mql5 меню работает замечательно, а в mql4 нет. При смене периода графика объекты меню дублируются, их расположение относительно друг друга меняется. Наверно в mql4 в классе CLabel не хватает каких-то методов, которые есть в mql5? Может подскажите что нужно дополнительно прописать в этом классе, чтобы таких проблем не возникало. 

Также в коде примера к классу CLabel мне не ясно,ч что выполняют эти строки:


Указанные строки являются макросами, которые прописаны в файле Defines.mqh. Если дословно, то первая строка макроса передает управление в функцию обработки событий класса CControlsDialog, затем выполняются функции, прописанные между этими макросами, последний макрос передает управление классу CAppDialog

 
Алексей Барбашин:

Указанные строки являются макросами, которые прописаны в файле Defines.mqh. Если дословно, то первая строка макроса передает управление в функцию обработки событий класса CControlsDialog, затем выполняются функции, прописанные между этими макросами, последний макрос передает управление классу CAppDialog


Спасибо, что-то начало проясняться) А можете дать ссылку на документацию по теме макросов? 

 
Aleksandr Teleguz:

Спасибо, что-то начало проясняться) А можете дать ссылку на документацию по теме макросов? 


https://www.mql5.com/ru/docs/basis/preprosessor/constant

Документация по MQL5: Основы языка / Препроцессор / Макроподстановка (#define)
Документация по MQL5: Основы языка / Препроцессор / Макроподстановка (#define)
  • www.mql5.com
Основы языка / Препроцессор / Макроподстановка (#define) - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

 int OnDeinit()

 

 {

   Alert("beg OnDeinit()");

 //  err=StringToInteger(err);

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

   return(0);

   

   Alert("end OnDeinit()");

 }

   //OnDeinit();-----------

пеменная err описана как integer


Непонятно,в чем проблема

Получил сообщение

 
buyanov:

 int OnDeinit()

 

 {

   Alert("beg OnDeinit()");

 //  err=StringToInteger(err);

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

   return(0);

   

   Alert("end OnDeinit()");

 }

   //OnDeinit();-----------

пеменная err описана как integer


Непонятно,в чем проблема

Получил сообщение


Не ясно в чем вопрос и где выдает ошибку. Если у Вас переменная err типа int, то для чего в закомментированной строке Вы ее пытаетесь преобразовать из типа string в int? В каком месте именно возникает ошибка?

 
Алексей Барбашин:

Не ясно в чем вопрос и где выдает ошибку. Если у Вас переменная err типа int, то для чего в закомментированной строке Вы ее пытаетесь преобразовать из типа string в int? В каком месте именно возникает ошибка?

В том-то и дело,что ошибки я не вижу,а предупреждение выдает implicut convertion integer to string.Подозреваю,что ошибка в компиляторе, хотя и  в это верится с трудом. В любом случае, надо разобраться.
 
buyanovпеменная err описана как integer     Непонятно,в чем проблема     Получил сообщение

В сообщении компилятора указана строка и позиция ошибки. Можно щелкнуть по строке с описанием (нижняя строка на рисунке) и курсор укажет ошибку в тексте программы. Функция DeInit выполняется перед самым удаление индикатора или советника с графика. Здесь, например, могут удаляться созданные графические элементы. Если действия, которые следует выполнять, отсутствуют (функция пустая) - функцию можно удалить... Если у Вас что-то вроде string x=125   исправьте на string x = (string)125

Вместо  err=StringToInteger(err);  лучше подойдет  err=StringToInteger((string)err);   хоть это и покажется кому-то смешным

 
STARIJ:

В сообщении компилятора указана строка и позиция ошибки. Можно щелкнуть по строке с описанием (нижняя строка на рисунке) и курсор укажет ошибку в тексте программы. Функция DeInit выполняется перед самым удаление индикатора или советника с графика. Здесь, например, могут удаляться созданные графические элементы. Если действия, которые следует выполнять, отсутствуют (функция пустая) - функцию можно удалить... Если у Вас что-то вроде string x=125   исправьте на string x = (string)125

Вместо  err=StringToInteger(err);  лучше подойдет  err=StringToInteger((string)err);   хоть это и покажется кому-то смешным


мдас...

сделал,как Вы рекомендовали

поставил в функцию Ondеinit строку err=StringToInteger((string)err);ошибку не выдает.

но предупреждение implicit convthtion from string to number все равно осталось, видно терминал таки придется переустанавливать.

 
buyanov:    сделал,как Вы рекомендовали    поставил в функцию Ondеinit строку err=StringToInteger((string)err);ошибку не выдает.

но предупреждение implicit convthtion from string to number все равно осталось, видно терминал таки придется переустанавливать.

Выложите свою функцию OnDeinit - посмотрю. И сообщите, чего от нее хотите. Ошибку выдает MetaEditor. Имейте копию папки терминала. Вот здесь Alexey Viktorov сказал, как быстро переустановить

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