Обсуждение статьи "DoEasy. Элементы управления (Часть 17): Отсечение невидимых участков объектов, вспомогательные WinForms-объекты кнопки со стрелками"

 

Опубликована статья DoEasy. Элементы управления (Часть 17): Отсечение невидимых участков объектов, вспомогательные WinForms-объекты кнопки со стрелками:

В статье создадим функционал сокрытия участков объектов, выходящих за пределы своего контейнера, создадим вспомогательные объекты-кнопки со стрелками для использования их в составе других WinForms-объектов.

Скомпилируем советник и запустим его на графике:


Что видим? Обрезание областей, выходящих за пределы области видимости, работает правильно, заголовки, выходящие за пределы контейнера, обрезаются по его грани, а если задать координаты TabControl так, чтобы элемент выходил за пределы контейнера слева, то и тут всё верно обрезается — сам элемент обрезается по граням панели, и кнопки, расположенные на элементе управления, тоже обрезаются по грани области видимости панели, а не своего контейнера. Тут всё работает верно. Горизонтальные кнопки влево-вправо имеют ширину, меньшую, чем по умолчанию (9 пикселей), и при этом отображаются корректно.
Что ещё пока не так? Объект-тень появляется перед тем, как появится панель, её отбрасывающая. С этим разберёмся по мере развития библиотеки.

Автор: Artyom Trishkin

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

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

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

Надеюсь, что проект будет доведён до конца и возможно даже заменит графическую часть стандартной библиотеки. С удовольствием буду использовать в своих проектах, если будет реализован весь тот необходимый для меня минимум, который реализован в EasyAndFastGUI и намного более.

Работы конечно ещё очень много, но уверен, что автор справится. 

Успехов!
EasyAndFastGUI - библиотека для создания графических интерфейсов
EasyAndFastGUI - библиотека для создания графических интерфейсов
  • www.mql5.com
Библиотека EasyAndFastGUI дает возможность создавать графические интерфейсы для своих MQL-программ.
 
Anatoli Kazharski #:
Странно, что такая слабая реакция от сообщества. Неужели больше никому не нужны графические интерфейсы. В своё время дискуссии были жаркие вокруг этой темы. Видимо сильно поредели ряды. Очень жаль.

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

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

Надеюсь, что проект будет доведён до конца и возможно даже заменит графическую часть стандартной библиотеки. С удовольствием буду использовать в своих проектах, если будет реализован весь тот необходимый для меня минимум, который реализован в EasyAndFastGUI и намного более.

Работы конечно ещё очень много, но уверен, что автор справится. 

Успехов!

Мне было нужно создание интерфейса, только ни одной библиотеки не было с хорошо отработанными событиями, корректным управлением окнами с точки зрения взаимного их расположения, перекрытий и ограничений области видимости. Если где-то и были вышеуказанные вещи с разной степенью проработки, то с созданием, удалением окон и изменением свойств в произвольный момент времени были проблемы.

Это всё должно быть костяком для графических интерфейсов. Почему сразу начинают заниматься "рисованием" - не понятно.

Внёс небольшие правки в исходный код текущей статьи в советник:

//--- Создадим объект 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);
      ...
     }

Немного поигрался с панельками, результат такой:

Переключение окна на передний план происходит при отжатии мышки, хотя должно при нажатии.

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

 
Anatoli Kazharski #:
Странно, что такая слабая реакция от сообщества. Неужели больше никому не нужны графические интерфейсы. В своё время дискуссии были жаркие вокруг этой темы. Видимо сильно поредели ряды. Очень жаль.

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

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

Надеюсь, что проект будет доведён до конца и возможно даже заменит графическую часть стандартной библиотеки. С удовольствием буду использовать в своих проектах, если будет реализован весь тот необходимый для меня минимум, который реализован в EasyAndFastGUI и намного более.

Работы конечно ещё очень много, но уверен, что автор справится. 

Успехов!
Спасибо, Анатолий, за отзыв. Конечно же, всё будет доведено до ума.
Хотелось бы знать, что бы тебе здесь хотелось бы видеть, какой функционал?
Очень не хватает обратной связи. 
 
Aliaksandr Hryshyn #:

Мне было нужно создание интерфейса, только ни одной библиотеки не было с хорошо отработанными событиями, корректным управлением окнами с точки зрения взаимного их расположения, перекрытий и ограничений области видимости. Если где-то и были вышеуказанные вещи с разной степенью проработки, то с созданием, удалением окон и изменением свойств в произвольный момент времени были проблемы.

Это всё должно быть костяком для графических интерфейсов. Почему сразу начинают заниматься "рисованием" - не понятно.

Внёс небольшие правки в исходный код текущей статьи в советник:

Немного поигрался с панельками, результат такой:

Переключение окна на передний план происходит при отжатии мышки, хотя должно при нажатии.

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

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

А для чего нужны события с других графиков?

Покликал своё визуальное приложение, параллельно запущен ваш советник, в логи пишется такое:

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 мс


 
Aliaksandr Hryshyn #:

А для чего нужны события с других графиков?

Покликал своё визуальное приложение, параллельно запущен ваш советник, в логи пишется такое:

Не понятно назначение этого.


Это очень медленно считается. Что будет с таблицей при большом количестве ячеек?

Замеры быстродействия обновления графических объектов:

Клик левой мышки по центру панели: 5 мс

Клик по заголовку активной вкладки: 7 мс

Клик по заголовку неактивной вкладки: 20 мс


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

 
Artyom Trishkin #:
Спасибо, Анатолий, за отзыв. Конечно же, всё будет доведено до ума.
Хотелось бы знать, что бы тебе здесь хотелось бы видеть, какой функционал?
Очень не хватает обратной связи. 

Минимальные потребности у меня закрыты с EasyAndFastGUI. Возможно, выпущу последнюю версию в маркете за небольшое вознаграждение, так как нет много времени на бесплатную поддержку.

А так, эту тему можно развивать бесконечно. Есть столько различных вариантов, к чему это всё может привести, что просто фантастика, какая-то. )

Мы ещё вернёмся к этому вопросу. Пока очень сильно занят. Продолжай работу, это очень интересно! 👍

 
Anatoli Kazharski #:

Минимальные потребности у меня закрыты с EasyAndFastGUI. Возможно, выпущу последнюю версию в маркете за небольшое вознаграждение, так как нет много времени на бесплатную поддержку.

А так, эту тему можно развивать бесконечно. Есть столько различных вариантов, к чему это всё может привести, что просто фантастика, какая-то. )

Мы ещё вернёмся к этому вопросу. Пока очень сильно занят. Продолжай работу, это очень интересно! 👍

Добро 👌