← К каталогу
Исходный код · ID 3543

listview.mqh

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

listview.mqh — это библиотека MQL5 для создания графических элементов списка представления (ListView) в терминале MetaTrader 5. Она предоставляет два класса для отображения прокручиваемого списка строк с ассоциированными числовыми значениями, поддержки выделения элементов, цветовой настройки и обработки пользовательских событий.

Основной класс CMyListView наследуется от CWndClient и реализует полный набор операций: добавление, вставку, обновление и удаление элементов, а также выбор по индексу, тексту или значению. Внутренне список использует массивы строк и значений, а для отображения создаётся набор дочерних элементов-строк с поддержкой вертикальной прокрутки.

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

Состав библиотеки

Классов: 2 · методов: 26 · конструкторов: 1 · деструкторов: 1 · отдельных функций: 0

Классы
Класс class CMyListView

Основной класс списка представления, наследник CWndClient, обеспечивающий отображение списка строк с ассоциированными значениями, прокрутку и выделение элементов.

Класс class SNListView

Расширенный класс списка с управлением размерами и шрифтом, наследник CMyListView.

Методы и конструкторы
Конструктор · CMyListView CMyListView(void)

Конструктор класса CMyListView, инициализирующий внутренние параметры смещения, количества видимых строк, высоты строки и текущего индекса.

Деструктор · CMyListView ~CMyListView(void)

Деструктор класса CMyListView, выполняющий очистку ресурсов.

Метод · CMyListView void ColorListItem(color clBg,color clSel)

Устанавливает цвета фона и выделения для элементов списка.

Метод · CMyListView bool Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2)

Создаёт элемент управления списком на графике с заданными координатами и размерами.

Метод · CMyListView void Destroy(const int reason)

Удаляет элемент управления списком и очищает внутренние данные.

Метод · CMyListView bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)

Обрабатывает события графика, перенаправляя клики и другие события в соответствующие обработчики.

Метод · CMyListView bool TotalView(const int value)

Задаёт количество видимых строк в списке; после первого вызова изменение невозможно.

Метод · CMyListView bool AddItem(const string item,const long value)

Добавляет элемент в конец списка (алиас метода ItemAdd для обратной совместимости).

Метод · CMyListView bool ItemAdd(const string item,const long value)

Добавляет элемент в конец списка с ассоциированным значением и обновляет прокрутку.

Метод · CMyListView bool ItemInsert(const int index,const string item,const long value)

Вставляет элемент в указанную позицию списка с ассоциированным значением.

Метод · CMyListView bool ItemUpdate(const int index,const string item,const long value)

Обновляет текст и значение элемента по указанному индексу.

Метод · CMyListView bool ItemDelete(const int index)

Удаляет элемент по указанному индексу из списка.

Метод · CMyListView bool ItemsClear(void)

Очищает все элементы списка и сбрасывает внутренние состояния.

Метод · CMyListView bool IsItem(const int index)

Проверяет наличие непустого элемента по указанному индексу.

Метод · CMyListView bool Update(const int index,const string item,const long value)

Обновляет текст и значение элемента по указанному индексу.

Метод · CMyListView int Current(void)

Возвращает текущий индекс выбранной строки.

Метод · CMyListView string Select(void)

Возвращает текст текущей выбранной строки.

Метод · CMyListView bool Select(const int index)

Выбирает элемент списка по индексу и обновляет отображение.

Метод · CMyListView bool SelectByText(const string text)

Выбирает элемент списка по текстовому содержимому.

Метод · CMyListView bool SelectByValue(const long value)

Выбирает элемент списка по ассоциированному значению.

Метод · CMyListView long Value(void)

Возвращает ассоциированное значение текущей выбранной строки.

Метод · CMyListView bool Show(void)

Делает элемент управления списком видимым и корректирует отображение строк.

Метод · SNListView void SetSize(int w,int h)

Устанавливает ширину и высоту элемента управления; если параметры равны нулю, используются значения по умолчанию.

Метод · SNListView int Width()

Возвращает текущую ширину элемента управления.

Метод · SNListView int Height()

Возвращает текущую высоту элемента управления.

Метод · SNListView bool Create(long chart,string name,int subwin,int x1,int y1)

Создаёт элемент управления списком с заданными координатами, размерами и позицией на графике.

Метод · SNListView void FontSize(int isize)

Устанавливает размер шрифта для всех дочерних элементов управления.

Метод · SNListView int getNoSelected(string &slist[])

Возвращает массив строк, которые не были выбраны в данный момент.

Получить полный код

Поиск по коду файла

#ifndef __SOVETNIKOV_COMBOBOX_21312423dfdsf
#define __SOVETNIKOV_COMBOBOX_21312423dfdsf

#include <sovetnikovGUI\defines.mqh>
#include <Controls\ListView.mqh>

class CMyListView : public CWndClient
  {
private:

   CEdit             m_rows[];              // array of the row objects

   int               m_offset;              // index of first visible row in array of rows
   int               m_total_view;          // number of visible rows
   int               m_item_height;         // height of visible row
   bool              m_height_variable;     // признак переменной высоты списка

   int               m_current;             // index of current row in array of rows

public:
   CArrayString      m_strings;             // array of rows
   CArrayLong        m_values;              // array of values

                     CMyListView(void);
                    ~CMyListView(void);

   color m_color_bg,m_color_listitem_sel,
   m_color_listitem_bg;

   void ColorListItem(color clBg,color clSel)
     {
      m_color_listitem_sel=clSel;
      m_color_listitem_bg=clBg;
     }

   virtual bool      Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2);
   virtual void      Destroy(const int reason=0);

   virtual bool      OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam);

   bool              TotalView(const int value);

   virtual bool      AddItem(const string item,const long value=0);

   virtual bool      ItemAdd(const string item,const long value=0);
   virtual bool      ItemInsert(const int index,const string item,const long value=0);
   virtual bool      ItemUpdate(const int index,const string item,const long value=0);
   virtual bool      ItemDelete(const int index);
   virtual bool      ItemsClear(void);
   virtual bool      IsItem(const int index);
   virtual bool      Update(const int index,const string item,const long value);

   int               Current(void) { return(m_current);               }
   string            Select(void)  { return(m_strings.At(m_current)); }
   bool              Select(const int index);
   bool              SelectByText(const string text);
   bool              SelectByValue(const long value);

   long              Value(void) { return(m_values.At(m_current));  }

   virtual bool      Show(void);

protected:

   bool              CreateRow(const int index);

   virtual bool      OnResize(void);

   virtual bool      OnVScrollShow(void);
   virtual bool      OnVScrollHide(void);
   virtual bool      OnScrollLineDown(void);
   virtual bool      OnScrollLineUp(void);
   virtual bool      OnItemClick(const int index);

   bool              Redraw(void);
   bool              RowState(const int index,const bool select);
   bool              CheckView(void);
  };

EVENT_MAP_BEGIN(CMyListView)

ON_INDEXED_EVENT(ON_CLICK,m_rows,OnItemClick)

EVENT_MAP_END(CWndClient)

CMyListView::CMyListView(void) : m_offset(0),
                                 m_total_view(0),
                                 m_item_height(CONTROLS_LIST_ITEM_HEIGHT),
                                 m_current(CONTROLS_INVALID_INDEX),
                                 m_height_variable(false)
  {
  }

CMyListView::~CMyListView(void)
  {
  }

bool CMyListView::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2)
  {
   int y=y2;

   if(!TotalView((y2-y1)/m_item_height))
      y=m_item_height+y1+2*CONTROLS_BORDER_WIDTH;

   if(m_total_view<1)
      return(false);

   if(!CWndClient::Create(chart,name,subwin,x1,y1,x2,y))
      return(false);

   if(!m_background.ColorBackground(m_color_listitem_bg))
      return(false);
   if(!m_background.ColorBorder(m_color_listitem_bg))
      return(false);

   ArrayResize(m_rows,m_total_view);
   for(int i=0;i<m_total_view;i++)
     {
      if(!CreateRow(i))
         return(false);
      if(m_height_variable && i>0)
         m_rows[i].Hide();
     }

   return(true);
  }

void CMyListView::Destroy(const int reason)
  {

   CWndClient::Destroy(reason);

   m_strings.Clear();
   m_values.Clear();

   m_offset    =0;
   m_total_view=0;
  }

bool CMyListView::TotalView(const int value)
  {

   if(m_total_view!=0)
     {
      m_height_variable=true;
      return(false);
     }

   m_total_view=value;

   return(true);
  }

bool CMyListView::Show(void)
  {

   CWndClient::Show();

   int total=m_strings.Total();

   if(total==0)
      total=1;

   if(m_height_variable && total<m_total_view)
      for(int i=total;i<m_total_view;i++)
         m_rows[i].Hide();

   return(true);
  }

bool CMyListView::CreateRow(const int index)
  {

   int x1=CONTROLS_BORDER_WIDTH;
   int y1=CONTROLS_BORDER_WIDTH+m_item_height*index;
   int x2=Width()-2*CONTROLS_BORDER_WIDTH;
   int y2=y1+m_item_height;

   if(!m_rows[index].Create(m_chart_id,m_name+"Item"+IntegerToString(index),m_subwin,x1,y1,x2,y2))
      return(false);
   if(!m_rows[index].Text(""))
      return(false);
   if(!m_rows[index].ReadOnly(true))
      return(false);
   if(!RowState(index,false))
      return(false);
   if(!Add(m_rows[index]))
      return(false);

   return(true);
  }

bool CMyListView::AddItem(const string item,const long value)
  {

   return(ItemAdd(item,value));
  }

bool CMyListView::ItemAdd(const string item,const long value)
  {

   if(!m_strings.Add(item))
      return(false);
   if(!m_values.Add((value)?value:m_values.Total()))
      return(false);

   int total=m_strings.Total();

   if(total<m_total_view+1)
     {
      if(m_height_variable && total!=1)
        {
         Height(total*m_item_height+2*CONTROLS_BORDER_WIDTH);
         if(IS_VISIBLE)
            m_rows[total-1].Show();
        }
      return(Redraw());
     }

   if(total==m_total_view+1)
     {

      if(!VScrolled(true))
         return(false);

      if(IS_VISIBLE && !OnVScrollShow())
         return(false);
     }

   m_scroll_v.MaxPos(m_strings.Total()-m_total_view);

   return(Redraw());
  }

bool CMyListView::ItemInsert(const int index,const string item,const long value)
  {

   if(!m_strings.Insert(item,index))
      return(false);
   if(!m_values.Insert(value,index))
      return(false);

   int total=m_strings.Total();

   if(total<m_total_view+1)
     {
      if(m_height_variable && total!=1)
        {
         Height(total*m_item_height+2*CONTROLS_BORDER_WIDTH);
         if(IS_VISIB

Показано первые 50% кода (символов: 9469)

Открыть по тарифу

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

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
946,90₽ ≈ $11.57