Обсуждение статьи "Графические интерфейсы X: Обновления для библиотеки Easy And Fast (build 2)" - страница 4

 

http://prntscr.com/tmjkm3


Здравствуйте. Я работаю с МТ4, поэтому, к сожалению, у меня последняя версия МТ4. Вот ошибка, которая, что бы я ни пробовал, не исправляется. Как вы видите на картинке выше, есть горизонтальная линия "рядом" с надписью. Если эта горизонтальная линия выделена, то при нажатии на нее внутри надписи она переходит в середину надписи и начинает двигаться вместе с ней. Также, если где-то на фоне окна есть горизонтальная линия, которая выделена, если щелкнуть и перетащить ее внутри окна, когда вы находитесь рядом с линией, она начнет перетаскивать линию вокруг. Это происходит со всеми объектами на графике, не только с линией, только когда они выделены.


Другими словами, панель и надпись не "перехватывают" событие мыши и не пропускают его к объектам под ними. Как исправить эту проблему?

Пожалуйста, кто-нибудь, помогите

Screenshot
Screenshot
  • prnt.sc
Captured with Lightshot
 

Здравствуйте,
Я так понимаю, что в этой статье последнее обновление для mql4 EasyAndFastGUI?
Можете, пожалуйста, подсказать как исправить предупреждение "expresion not boolen".


 
Nauris Zukas #:

Здравствуйте,
Я так понимаю, что в этой статье последнее обновление для mql4 EasyAndFastGUI?
Можете, пожалуйста, подсказать как исправить предупреждение "expresion not boolen".


m_show_flags какой имеет тип? Если не bool, то так: return((bool)m_show_flags);

 
Artyom Trishkin #:

m_show_flags какой имеет тип? Если не bool, то так: return((bool)m_show_flags);

uint m_show_flags. Если это поменять на bool то предупреждение пропадёт, но из за того что я не уверен что это где-то по цепочке не повредит какой-то функций, то я сделаю как Вы посоветовали. Спасибо.

 
Nauris Zukas #:

uint m_show_flags. Если это поменять на bool то предупреждение пропадёт, но из за того что я не уверен что это где-то по цепочке не повредит какой-то функций, то я сделаю как Вы посоветовали. Спасибо.

На bool менять нельзя - ведь это же набор флагов. Соответственно, значение переменной может быть больше 1. Если её значение равно нулю, то это равносильно значению false  переменной с типом bool. Поэтому при приведении результата возврата к типу bool, любое значение переменной, отличной от нуля даст значение true. Соответственно, только 0 даст значение false.

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

Я могу ошибаться о назначении этого метода. Но предположения свои взял из того, что это вот этот набор флагов:

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Видимость объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

И, кстати, исходя из вышеозвученного, Вы можете написать метод так:

bool ShowFlags(void) const { return m_show_flags!=OBJ_NO_PERIODS; }

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

Но выбирать Вам - разницы особой нету.

 
Artyom Trishkin #:

И, кстати, исходя из вышеозвученного, Вы можете написать метод так:

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

Но выбирать Вам - разницы особой нету.

Артём, на мой взгляд лучше поменять тип функции на uint

uint ShowFlags(void) const { return m_show_flags; }

Тогда по значению полученному от этой функции можно будет проверить видимость объекта на конкретном ТФ. Ведь это не конкретное значение, а набор флагов…

 
Alexey Viktorov #:

Артём, на мой взгляд лучше поменять тип функции на uint

Тогда по значению полученному от этой функции можно будет проверить видимость объекта на конкретном ТФ. Ведь это не конкретное значение, а набор флагов…

Мы не знаем смысла этого метода. Скорее всего это именно флаг - виден/не виден. А выковыривать из результата нужные флаги - усложнение жизни пользователя библиотеки.

 
Artyom Trishkin #:

Мы не знаем смысла этого метода. Скорее всего это именно флаг - виден/не виден. А выковыривать из результата нужные флаги - усложнение жизни пользователя библиотеки.

А если меня, как начинающего, интересует виден-ли объект на графике ТФ Н1 и воспользовавшись этим методом я получаю, что объект виден на ТФ М15, соответственно true, но на графике его не вижу… Тогда как?

Может быть лучше входящий параметр добавить и делать проверку видимости на указанном ТФ. Или ещё как-то, но в таком виде мне что-то не очень понятно…

 
Alexey Viktorov #:

А если меня, как начинающего, интересует виден-ли объект на графике ТФ Н1 и воспользовавшись этим методом я получаю, что объект виден на ТФ М15, соответственно true, но на графике его не вижу… Тогда как?

Может быть лучше входящий параметр добавить и делать проверку видимости на указанном ТФ. Или ещё как-то, но в таком виде мне что-то не очень понятно…

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

Разговор был о конкретном методе, и почему компилятор выдаёт предупреждение. Почему - понятно (тип не тот), а как исправить - показал два варианта.