Обсуждение статьи "Графические интерфейсы XI: Интеграция графической стандартной библиотеки (build 16)"

 

Опубликована статья Графические интерфейсы XI: Интеграция графической стандартной библиотеки (build 16):

С недавнего времени была представлена новая версия графической библиотеки для создания научных графиков (класс CGraphic). В этом обновлении разрабатываемой библиотеки для создания графических интерфейсов будет представлена версия с новым элементом для создания графиков. Теперь визуализировать данные различных типов можно будет ещё проще.

Ранее в разрабатываемой библиотеке использовалась копия класса CCanvas, предназначенная для рисования. В связи с недавно проведённым глобальным рефакторингом кода библиотеки теперь в этой копии нет необходимости, и её можно удалить, заменив оригинальной версией из стандартной библиотеки. Это уменьшило объём библиотеки ещё приблизительно на 10% и на почти 40% относительно версии, которая была представлена до рефакторинга в статьях Графические интерфейсы XI: Рефакторинг кода библиотеки (build 14.1) и Графические интерфейсы XI: Нарисованные элементы управления (build 14.2).

Для создания графиков теперь будет использоваться класс CGraphic.

 Рис. 7. Демонстрация анимированного гипоциклоида.

Рис. 7. Демонстрация анимированного гипоциклоида.

Автор: Anatoli Kazharski

 
Отличная статья.
 

Отличная библиотека!

 

Congrantulations again! Nice job!

 

Добрый день.

Проблема возникла откуда не ждали...

Была программа - одно основное окно, одно диалоговое. Все нормально. Добавил еще одно диалоговое окно.

Теперь вот как они себя ведут. Открываем одно диалоговое окно - все нормально, работает. Закрываем. Открываем второе, элементы в нем не реагируют на нажатия, точнее как-то странно реагируют (на скриншоте). Пока не кликнешь на заголовок окна, после все нормально с этим окном. Но такая же проблема теперь с первым окном, пока не кликнешь на заголовок.

Подскажите, пожалуйста, что может быть не так? Или куда вообще смотреть?

Файлы:
123123123.gif  504 kb
 

Я скачал пакет и создал демонстрационный графический интерфейс CTable.

#include <\\EasyAndFastGUI\\WndEvents.mqh>

//+------------------------------------------------------------------+
//| Класс для создания приложения|
//+------------------------------------------------------------------+
class CGUI : public CWndEvents {
  private:
    CWindow           m_window;
    CTable            m_table;

  public:
    bool              CreateGUI(const int x, const int y, const string caption_text);

  private:
    bool              CreateWindow(const int x, const int y, const int x_size, const int y_size, const string text);
    bool              CreateTable(const int x_gap, const int y_gap);
};

bool CGUI::CreateGUI(const int x, const int y, const string caption_text) {
  int x_size = 400,
      y_size = 400;
  
  if (!CreateWindow(x, y, x_size, y_size, caption_text)) {
    return(false);
  }

  if (!CreateTable(1, 20)) {
    return(false);
  }

  m_chart.Redraw();
  return(true);
}

//+------------------------------------------------------------------+
//| Создает форму 1 для элементов управления|
//+------------------------------------------------------------------+
bool CGUI::CreateWindow(const int x, const int y, const int x_size, const int y_size, const string caption_text) {
  CWndContainer::AddWindow(m_window);

  m_window.XSize(x_size);
  m_window.YSize(y_size);
  m_window.Alpha(255);

  m_window.IsMovable(true);
  m_window.ResizeMode(true);
  m_window.CloseButtonIsUsed(true);
  m_window.FullscreenButtonIsUsed(true);
  m_window.CollapseButtonIsUsed(true);
  m_window.TooltipsButtonIsUsed(true);
  m_window.RollUpSubwindowMode(true, true);
  m_window.TransparentOnlyCaption(true);

  //--- Установите всплывающие подсказки
  m_window.GetCloseButtonPointer().Tooltip("Close");
  m_window.GetFullscreenButtonPointer().Tooltip("Fullscreen/Minimize");
  m_window.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
  m_window.GetTooltipButtonPointer().Tooltip("Tooltips");

  m_window.BackColor((color)ChartGetInteger(m_chart_id, CHART_COLOR_BACKGROUND));
  m_window.BorderColor(clrMaroon);

  return(m_window.CreateWindow(m_chart_id, m_subwin, caption_text, x, y));
}

//+------------------------------------------------------------------+
//| Создайте визуализированную таблицу|
//+------------------------------------------------------------------+
bool CGUI::CreateTable(const int x_gap,const int y_gap) {
  m_table.MainPointer(m_window);

  int x_size = 300,
      y_size = 300;

  int column_width[] = {100, 200};

  m_table.XSize(x_size);
  m_table.YSize(y_size);

  m_table.TableSize(2, 10);

  m_table.ColumnsWidth(column_width);
  m_table.CellYSize(30);

  ENUM_ALIGN_MODE column_align[];
  ArrayResize(column_align, 2);
  ::ArrayInitialize(column_align, ALIGN_RIGHT);
  m_table.TextAlign(column_align);

  color bg_color = (color)ChartGetInteger(m_chart_id, CHART_COLOR_BACKGROUND);
  m_table.CellColor(bg_color);
  m_table.GridColor(bg_color);
  m_table.BorderColor(bg_color);
  m_table.FontSize(12);

  /*
 CScrollV *scroll_v = m_table.GetScrollVPointer();
 scroll_v.ChangeThumbSize(0, 0);
 scroll_v.Hide();
 scroll_v.IsVisible(false);

 CScrollH *scroll_h = m_table.GetScrollHPointer();
 scroll_h.ChangeThumbSize(0, 0);
 scroll_h.Hide();
 scroll_h.IsVisible(false);
 //*/
   

  //m_table.TextXOffset(5);
  //m_table.TextYOffset(4);
  m_table.ShowHeaders(false);
  m_table.SelectableRow(false);
  m_table.ColumnResizeMode(false);
  //m_table.IsZebraFormatRows(clrWhiteSmoke);
  //m_table.AutoXResizeMode(true);
  //m_table.AutoXResizeRightOffset(1);
  //m_table.AutoYResizeMode(true);
  //m_table.AutoYResizeBottomOffset(25);

  if (!m_table.CreateTable(x_gap, y_gap)) {
    return(false);
  }

  CWndContainer::AddToElementsArray(0, m_table);

  m_table.Update(true);

  m_window.Update(true);

  return(true);
}

//+------------------------------------------------------------------+
//| Функция инициализации эксперта|
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   CGUI gui;
   gui.CreateGUI(10, 50, "Test GUI");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Функция деинициализации эксперта|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Функция экспертного тика|
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+

Но я обнаружил, что элемент управления CTable все равно оставляет пробелы на полосе прокрутки H/V, и я не могу удалить их с помощью Hide(), IsVisiable(false).


Не могли бы вы подсказать мне обходной путь?

Заранее спасибо,

Дэвид

 

Возможно этот вопрос уже обсуждался, но я не увидел. Как сделать так, что бы панелька перерисовывалась после добавления новых объектов на график (например линий)


Я заметил, что если свернуть развернуть панель, то она уже поверх этих линий, но не вся :((



 
traderEvgen:

Возможно этот вопрос уже обсуждался, но я не увидел. Как сделать так, что бы панелька перерисовывалась после добавления новых объектов на график (например линий)

  • Скачайте последнюю версию библиотеки.
  • Попробуйте вызвать метод CWndEvents::ResetWindow().

P.S. Библиотека больше не будет обновляться. Все необходимые изменения, исправления и дополнения, если возникает такая необходимость, пользователи должны научиться вносить самостоятельно. 

 
Anatoli Kazharski:

  • Скачайте последнюю версию библиотеки.
  • Попробуйте вызвать метод CWndEvents::ResetWindow().

P.S. Библиотека больше не будет обновляться. Все необходимые изменения, исправления и дополнения, если возникает такая необходимость, пользователи должны научиться вносить самостоятельно. 


Понял, спасибо

 

К сожалению, различные сборки (релизы) не подходят друг другу.

То есть, все примеры от Article01 до Article11 должны работать без ошибок.

Однако в предыдущих примерах компилятор выдает множество предупреждений и ошибок.


При "копировании" новых версий старые примеры перестают работать.

Более того, переводы неадекватны или вовсе отсутствуют.

Отлично!


Это позор и типично для многих вещей в Metaquotes.

Пора бы уже выложить в сеть полностью функциональный и полный релиз, а не просто несовместимые куски и части.

Оглавление файлов примеров и где найти то, чего не хватает. Это было бы темой для последней статьи в этой серии, поскольку, по слухам, она не будет продолжена.

Было бы очень обидно потратить всю эту работу впустую, если бы не было рабочих примеров, которые можно было бы использовать.

С уважением, Отто Паузер

А вот чего действительно не хватает, так это редактора диалогов!

 

Я собираюсь попробовать