Обсуждение статьи "DoEasy. Элементы управления (Часть 17): Отсечение невидимых участков объектов, вспомогательные WinForms-объекты кнопки со стрелками"
![EasyAndFastGUI - библиотека для создания графических интерфейсов EasyAndFastGUI - библиотека для создания графических интерфейсов](https://c.mql5.com/36/58/easyandfastgui-biblioteka-dlya.jpg)
- www.mql5.com
Мне было нужно создание интерфейса, только ни одной библиотеки не было с хорошо отработанными событиями, корректным управлением окнами с точки зрения взаимного их расположения, перекрытий и ограничений области видимости. Если где-то и были вышеуказанные вещи с разной степенью проработки, то с созданием, удалением окон и изменением свойств в произвольный момент времени были проблемы.
Это всё должно быть костяком для графических интерфейсов. Почему сразу начинают заниматься "рисованием" - не понятно.
Внёс небольшие правки в исходный код текущей статьи в советник:
//--- Создадим объект WinForms Panel for(int i1=0; i1<2; i1++) { CPanel *pnl=NULL; pnl=engine.CreateWFPanel("WFPanel"+string(i1),50,50,410,200,array_clr,200,true,true,false,-1,FRAME_STYLE_BEVEL,true,false); ... }
Немного поигрался с панельками, результат такой:
Переключение окна на передний план происходит при отжатии мышки, хотя должно при нажатии.
Получение событий происходит через индикатор, наверное для тестера делалось, без него события не работают, в тестере тоже, даже при загрузке индикатора через шаблон...
Мне было нужно создание интерфейса, только ни одной библиотеки не было с хорошо отработанными событиями, корректным управлением окнами с точки зрения взаимного их расположения, перекрытий и ограничений области видимости. Если где-то и были вышеуказанные вещи с разной степенью проработки, то с созданием, удалением окон и изменением свойств в произвольный момент времени были проблемы.
Это всё должно быть костяком для графических интерфейсов. Почему сразу начинают заниматься "рисованием" - не понятно.
Внёс небольшие правки в исходный код текущей статьи в советник:
Немного поигрался с панельками, результат такой:
Переключение окна на передний план происходит при отжатии мышки, хотя должно при нажатии.
Получение событий происходит через индикатор, наверное для тестера делалось, без него события не работают, в тестере тоже, даже при загрузке индикатора через шаблон...
А для чего нужны события с других графиков?
Покликал своё визуальное приложение, параллельно запущен ваш советник, в логи пишется такое:
2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1) Графическая метка "1716653226_u_0": ID 10001, 2022.09.10 22:16:34 2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1) OnChartEvent: Состояние кнопки: Отжата 2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1) OnChartEvent: Изменено свойство графического объекта: 2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1) Графическая метка "1716653226_u_0": ID 10001, 2022.09.10 22:16:34 2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1) OnChartEvent: Имя BMP-файла: 2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1) - Состояние "On" [0]: "\Experts\Greshnik\Strategy_viewer.ex5::1716653226_u_012896816886410156413404032" 2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1) - Состояние "Off" [1]: Отсутствует 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) CGStdGraphObj::PropertiesCheckChanged: Создан снимок истории изменений графического объекта #19: 2022.09.09 23:54:59.875 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) OnChartEvent: Изменено свойство графического объекта: 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) Графическая метка "1716653226_u_0": ID 10001, 2022.09.10 22:16:34 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) OnChartEvent: Время создания: 2022.09.10 22:18:38 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) OnChartEvent: Изменено свойство графического объекта: 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) Графическая метка "1716653226_u_0": ID 10001, 2022.09.10 22:16:34 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) OnChartEvent: Имя BMP-файла: 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) - Состояние "On" [0]: "\Experts\Greshnik\Strategy_viewer.ex5::1716653226_u_012896816886410156413395097" 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) - Состояние "Off" [1]: Отсутствует 2022.09.10 22:18:38.959 TestDoEasy117 (AUDUSD,M1) CGStdGraphObj::PropertiesCheckChanged: Создан снимок истории изменений графического объекта #20: 2022.09.09 23:54:59.875
Не понятно назначение этого.
Это очень медленно считается. Что будет с таблицей при большом количестве ячеек?
Замеры быстродействия обновления графических объектов:
//--- Обработки событий коллекции графических элементов ulong mcs=GetMicrosecondCount(); engine.GetGraphicObjCollection().OnChartEvent(id,lparam,dparam,sparam); Print((GetMicrosecondCount()-mcs)/1000.0);
Клик левой мышки по центру панели: 5 мс
Клик по заголовку активной вкладки: 7 мс
Клик по заголовку неактивной вкладки: 20 мс
А для чего нужны события с других графиков?
Покликал своё визуальное приложение, параллельно запущен ваш советник, в логи пишется такое:
Не понятно назначение этого.
Это очень медленно считается. Что будет с таблицей при большом количестве ячеек?
Замеры быстродействия обновления графических объектов:
Клик левой мышки по центру панели: 5 мс
Клик по заголовку активной вкладки: 7 мс
Клик по заголовку неактивной вкладки: 20 мс
Библиотека сканирует всё окружение и выводит сообщения о регистрируемых событиях. На данный момент это всего лишь отладочные сообщения - библиотека находится на стадии разработки. Когда будет полноценно работать, будет выбор того, что нужно, а что не нужно.
Спасибо, Анатолий, за отзыв. Конечно же, всё будет доведено до ума.
Минимальные потребности у меня закрыты с EasyAndFastGUI. Возможно, выпущу последнюю версию в маркете за небольшое вознаграждение, так как нет много времени на бесплатную поддержку.
А так, эту тему можно развивать бесконечно. Есть столько различных вариантов, к чему это всё может привести, что просто фантастика, какая-то. )
Мы ещё вернёмся к этому вопросу. Пока очень сильно занят. Продолжай работу, это очень интересно! 👍
Минимальные потребности у меня закрыты с EasyAndFastGUI. Возможно, выпущу последнюю версию в маркете за небольшое вознаграждение, так как нет много времени на бесплатную поддержку.
А так, эту тему можно развивать бесконечно. Есть столько различных вариантов, к чему это всё может привести, что просто фантастика, какая-то. )
Мы ещё вернёмся к этому вопросу. Пока очень сильно занят. Продолжай работу, это очень интересно! 👍
Добро 👌
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья DoEasy. Элементы управления (Часть 17): Отсечение невидимых участков объектов, вспомогательные WinForms-объекты кнопки со стрелками:
В статье создадим функционал сокрытия участков объектов, выходящих за пределы своего контейнера, создадим вспомогательные объекты-кнопки со стрелками для использования их в составе других WinForms-объектов.
Скомпилируем советник и запустим его на графике:
Что видим? Обрезание областей, выходящих за пределы области видимости, работает правильно, заголовки, выходящие за пределы контейнера, обрезаются по его грани, а если задать координаты TabControl так, чтобы элемент выходил за пределы контейнера слева, то и тут всё верно обрезается — сам элемент обрезается по граням панели, и кнопки, расположенные на элементе управления, тоже обрезаются по грани области видимости панели, а не своего контейнера. Тут всё работает верно. Горизонтальные кнопки влево-вправо имеют ширину, меньшую, чем по умолчанию (9 пикселей), и при этом отображаются корректно.
Что ещё пока не так? Объект-тень появляется перед тем, как появится панель, её отбрасывающая. С этим разберёмся по мере развития библиотеки.
Автор: Artyom Trishkin