Новая статья: Графические интерфейсы I: Функции для кнопок формы и удаление элементов интерфейса (Глава 4)
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
На mql5.com опубликована статья Графические интерфейсы I: Функции для кнопок формы и удаление элементов интерфейса (Глава 4):
Эта статья является продолжением первой части серии о графических интерфейсах. Более подробно, для чего предназначена эта библиотека, можно прочитать в самой первой статье: Графические интерфейсы I: Подготовка структуры библиотеки (Глава 1). Полный список ссылок на статьи первой части находится в конце каждой главы и там же есть возможность загрузить к себе на компьютер полную версию библиотеки на текущей стадии разработки. Файлы нужно разместить по тем же директориям, как они расположены в архиве.
В предыдущей статье в класс CWindow были внесены дополнения, которые позволяют перемещать форму на графике, а ее элементы теперь умеют реагировать на перемещение курсора мыши. В этой главе продолжим развивать класс CWindow, дополняя его методами, которые позволят управлять формой посредством нажатия на ее элементах. Сделаем так, чтобы программу можно было закрыть через кнопку на форме, а также реализуем возможность сворачивания и разворачивания формы при необходимости.
Удаление элементов интерфейса
Если вы дошли до этого момента и делали все в той же последовательности, как изложено в статье, то вы могли заметить, что при удалении эксперта с графика все объекты графического интерфейса удаляются. Но мы не рассматривали до сих пор методы для удаления графических объектов с графика. Почему объекты удаляются при удалении эксперта? Этот момент учтен в стандартной библиотеке классов. А именно, в деструкторе класса CChartObject, производные классы которого используются в нашей библиотеке. При удалении программы с графика вызываются деструкторы классов, включая и этот. И если объект был закреплен за этим графиком, то он удаляется (смотрите код ниже):
Но если изменить символ графика или его таймфрейм, когда эксперт находится на графике, то деструкторы не вызываются, и графические объекты в таком случае не удалятся. А так как графический интерфейс создается в функции инициализации OnInit() в главном файле программы, и при смене символа или таймфрейма эксперта сначала производится деинициализация и затем инициализация, то графический интерфейс будет создан поверх того, что уже есть. В итоге с первой такой манипуляции вы получите две копии объектов, а если будете продолжать изменять символ графика или таймфрейм, то получите множество копий объектов интерфейса.
Рис. 4. Тест формы при переключении символа и таймфрейма графика
Автор: Anatoli Kazharski