Обсуждение статьи "Графические интерфейсы IV: Информационные элементы интерфейса (Глава 1)"

 

Опубликована статья Графические интерфейсы IV: Информационные элементы интерфейса (Глава 1):

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

«Статусная строка» (или «строка состояния») относится к информационным элементам графического интерфейса. Этот элемент предназначен для оперативного вывода каких-либо важных данных, сведений, подсказок и т.д. 

В этой статье мы создадим простой вариант строки состояния, без возможности присоединения к её пунктам контекстных меню. Так же, как и другие элементы интерфейса, статусная строка будет собираться из нескольких объектов-примитивов:

  • Фон
  • Пункты
  • Разделительные линии

Рис. 1. Составные части элемента «Статусная строка».

Рис. 1. Составные части элемента «Статусная строка».


Если всё сделали правильно, то результат должен быть таким, как на скриншоте ниже:

Рис. 2. Тест элемента «Статусная строка».

Рис. 2. Тест элемента «Статусная строка».

 

Разработка класса для создания элемента «Статусная строка» завершена. Полную версию можно посмотреть в приложенных к статье файлах. 

Автор: Anatoli Kazharski

 
Анатолий, отличная серия статей, причем актуальная. Не могли бы вы: 1. Публиковать в начале каждой статьи список предыдущих. Поиск на сайте не всегда рулит правильно) 2. Делать некую сумму знаний в виде примера. Не надо его разжевывать, я думаю, кто читает Ваши статьи - разберется. Но было бы интересно посмотреть сразу на веселый результат. 3. Успехов, жду продолжений)
 
Alexey Volchanskiy:
Анатолий, отличная серия статей, причем актуальная. Не могли бы вы: 1. Публиковать в начале каждой статьи список предыдущих. Поиск на сайте не всегда рулит правильно) 2. Делать некую сумму знаний в виде примера. Не надо его разжевывать, я думаю, кто читает Ваши статьи - разберется. Но было бы интересно посмотреть сразу на веселый результат. 3. Успехов, жду продолжений)

Спасибо.

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

 
Anatoli Kazharski:

Спасибо.

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

+1
 
Rashid Umarov:
Договорились. )
 

Толь, не глядел что в последних двух версиях, но до них точно есть такой баг в CCtatusBar:

Если в таймере идёт обновление статусной строки m_status_bar.ValueToItem(), то если основное окно свёрнуто, то статусная строка висит на графике постоянно - она не сворачивается. Приходится постоянно контролировать в своём CProgram таким образом:

if(m_status_bar.IsDropdown()) { m_status_bar.ValueToItem(....); }

Чтобы исправить, нужно дописать в CCtatusBar в метод ValueToItem() такую проверку:

//+------------------------------------------------------------------+
//| Устанавливает значение по указанному индексу                     |
//+------------------------------------------------------------------+
void CStatusBar::ValueToItem(const uint index,const string value)
  {
//--- Проверка на выход из диапазона
   uint array_size=::ArraySize(m_items);
   if(array_size<1 || m_wnd.IsMinimized())
      return;
//--- Скорректировать значение индекса, если выходит из диапазона
   uint correct_index=(index>=array_size)? array_size-1 : index;
//--- Установка переданного текста
   m_items[correct_index].Description(value);
  }
//+------------------------------------------------------------------+

Тогда будет всё нормально, и не нужно в своей программе постоянно помнить об этом и контролировать.

 
Artyom Trishkin:

...

Если в таймере идёт обновление статусной строки m_status_bar.ValueToItem(), то если основное окно свёрнуто, то статусная строка висит на графике постоянно - она не сворачивается. 

...

Проверил. Почти во всех тестовых примерах из статей есть статусная строка с обновлением в таймере. Описанное поведение не воспроизводится
 
Anatoli Kazharski:
Проверил. Почти во всех тестовых примерах из статей есть статусная строка с обновлением в таймере. Описанное поведение не воспроизводится

Знаешь, хотел видео записать как так получается, но, увы, после возврата к твоей версии ValueToItem(), у меня тоже исчезло такое поведение. Но ведь было... Может потому, что рынок сейчас закрыт...

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

 

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

Типа индикатора соединения или еще чего...
)

 
Mikhail Dovbakh:

...
Пользуясь случаем, спрошу:
как можно в статусной строке использовать иконки?

Типа индикатора соединения или еще чего... )

В статусной строке пока нет такой возможности, но скоро будет.
 
Anatoli Kazharski:
В статусной строке пока нет такой возможности, но скоро будет.

Спасибо еще раз!