Обсуждение статьи "Графические интерфейсы IX: Элементы "Индикатор выполнения" и "Линейный график" (Глава 2)" - страница 3

 

Анатоль, подскажи, есть ли возможность динамически менять описание процесса в прогресс-баре?

Допустим, имеем некий массив имён символов. Идём в цикле по этому массиву и получаем имена символов. Далее каждый символ обрабатывается программой для получения с него данных. Общий цикл отображается одним прогресс-баром, но хотелось бы ещё отображать процесс обработки каждого отдельного символа. Соответственно, и подписывать название процесса "обрабатываю CMG", потом, при обработке следующего, уже писать другое название процесса: "обрабатываю EQIX", и т.д.

Заранее не известно какие символы могут находиться в массиве - т.е. подготовить кучку прогресс-баров не получится, да и не оптимально это при более тысячи названий различных символов...

 
Artyom Trishkin:

Анатоль, подскажи, есть ли возможность динамически менять описание процесса в прогресс-баре?

Допустим, имеем некий массив имён символов. Идём в цикле по этому массиву и получаем имена символов. Далее каждый символ обрабатывается программой для получения с него данных. Общий цикл отображается одним прогресс-баром, но хотелось бы ещё отображать процесс обработки каждого отдельного символа. Соответственно, и подписывать название процесса "обрабатываю CMG", потом, при обработке следующего, уже писать другое название процесса: "обрабатываю EQIX", и т.д.

Заранее не известно какие символы могут находиться в массиве - т.е. подготовить кучку прогресс-баров не получится, да и не оптимально это при более тысячи названий различных символов...

Сейчас нет такого метода. В следующем обновлении добавлю такую возможность для каждого элемента, у которого есть текстовое описание. То есть будет возможность изменять текст уже после создания элемента.
 
Anatoli Kazharski:
Сейчас нет такого метода. В следующем обновлении добавлю такую возможность для каждого элемента, у которого есть текстовое описание. То есть будет возможность изменять текст уже после создания элемента.

Спасибо, с нетерпением ждём-с ;)

Вопрос: у тебя в примерах есть такой код построения прогресс-бара:

//+------------------------------------------------------------------+
//| Создаёт прогресс бар                                             |
//+------------------------------------------------------------------+
bool CProgram::CreateProgressBar(const int x_gap,const int y_gap)
  {
//--- Сохраним указатель на форму
   m_progress_bar.WindowPointer(m_window);
//--- Координаты
   int x=m_window.X()+x_gap;
   int y=m_window.Y()+y_gap;
//--- Установим свойства перед созданием
   m_progress_bar.YSize(15);
   m_progress_bar.BarYSize(11);
   m_progress_bar.BarXOffset(65);
   m_progress_bar.BarYOffset(2);
   m_progress_bar.BarBorderWidth(1);
   m_progress_bar.LabelText("Processing:");
   m_progress_bar.AreaColor(C'225,225,225');
   m_progress_bar.BarAreaColor(clrWhiteSmoke);
   m_progress_bar.BarBorderColor(clrWhiteSmoke);
   m_progress_bar.IsDropdown(true);
   m_progress_bar.AutoXResizeMode(true);
   m_progress_bar.AutoXResizeRightOffset(230);
//--- Создание элемента
   if(!m_progress_bar.CreateProgressBar(m_chart_id,m_subwin,x,y))
      return(false);
//--- Скрыть элемент
   m_progress_bar.Hide();
//--- Добавим указатель на элемент в базу
   CWndContainer::AddToElementsArray(0,m_progress_bar);
   return(true);
  }
//+------------------------------------------------------------------+

для чего нужен признак выпадающего элемента:

m_progress_bar.IsDropdown(true);

???

 
Artyom Trishkin:

Вопрос: у тебя в примерах есть такой код построения прогресс-бара:

для чего нужен признак выпадающего элемента:

???

Для исключения показа прогресс-бара при разворачивании формы, когда его не должно быть видно. 
 
Anatoli Kazharski:
Для исключения показа прогресс-бара при разворачивании формы, когда его не должно быть видно. 
Это относится к любым объектам, которые можно построить при помощи твоей библиотеки?
 
Artyom Trishkin:
Это относится к любым объектам, которые можно построить при помощи твоей библиотеки?
Да. Метод IsDropdown() находится в базовом классе CElement и доступен для всех элементов графического интерфейса
 

Динамическое изменение свойств прогресс-бара не работает.

Например хотел поменять цвет:

   void              IndicatorColor(const color clr)    { m_indicator_color=clr;           }

Ноль реакции. Видимо в методе Update нужно прописывать, помимо изменений значения index и total, еще и остальные m_indicator_color и т.д. Иначе эти методы нигде не применяются, кроме как при создании. Или так и было задумано?

 
Alexander Fedosov:

... Иначе эти методы нигде не применяются, кроме как при создании. Или так и было задумано?

Да, это временная версия. Скоро (в ближайшие несколько статей) будут массовые обновления для всех элементов управления, где можно будет изменять любое свойство во время выполнения программы.
 
Anatoli Kazharski:
Да, это временная версия. Скоро (в ближайшие несколько статей) будут массовые обновления для всех элементов управления, где можно будет изменять любое свойство во время выполнения программы.

Это радует. А пока я нашел временное решение:

//+------------------------------------------------------------------+
//| Обновляет прогресс бар                                           |
//+------------------------------------------------------------------+
void CProgressBar::Update(const int index,const int total)
  {
//--- Установить новый индекс
   CurrentIndex(index);
//--- Установить новый диапазон
   StepsTotal(total);
//--- Рассчитаем ширину индикатора
   double new_width=(m_current_index/m_steps_total)*m_bar_bg.XSize();
//--- Скорректировать, если меньше 1
   if((int)new_width<1)
      new_width=1;
   else
     {
      //--- Скорректировать с учётом ширины рамки
      int x_size=m_bar_bg.XSize()-(m_bar_border_width*2);
      //--- Скорректировать, если выход за границу
      if((int)new_width>=x_size)
         new_width=x_size;
     }
//--- Установим индикатору новую ширину
   m_indicator.X_Size((int)new_width);
//--- Рассчитаем процент и сформируем строку
   double percent =m_current_index/m_steps_total*100;
   string desc    =::DoubleToString((percent>100)? 100 : percent,m_digits)+"%";
//--- Установим новое значение
   m_percent.Description(desc);
   
   m_indicator.BackColor(m_indicator_color);
   m_indicator.Color(m_indicator_color);
  }
 
Всем привет,

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

Я использую графическую библиотеку в советнике, который я кодирую на MQL4, и мне нужно показать линейную диаграмму на экране. Я использовал эту статью в качестве ссылки (ГРАФИЧЕСКИЕ ИНТЕРФЕЙСЫ IX: ЭЛЕМЕНТЫ «ИНДИКАТОР ПРОГРЕССА» И «ЛИНЕЙНЫЙ ГРАФ» (ГЛАВА 2)), и мне удалось показать линейный график без проблем.

Однако я изо всех сил пытаюсь показать горизонтальную шкалу (горизонтальный индекс) на экране для линейного графика. Я могу показать вертикальную шкалу (и сетку), но не могу показать горизонтальный масштаб / индекс аналогичным образом. Может ли кто-нибудь помочь мне в этом? Проблема, я думаю, в том, что мне нужен советник для MT4, и, хотя в библиотеке MQL5 есть много примеров и объектов, мне кажется, что опции для MT4 / MQL4 более ограничены. Есть ли способ легко показать горизонтальный масштаб в MQL4 / MT4 с помощью объекта Line Graph?

Заранее большое спасибо.
С теплыми пожеланиями
RJ
Причина обращения: