class CMyListView
Основной класс списка представления, наследник CWndClient, обеспечивающий отображение списка строк с ассоциированными значениями, прокрутку и выделение элементов.
Сообщите нам, если считаете, что материал размещён без разрешения.
Обращение по товару «listview.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
listview.mqh — это библиотека MQL5 для создания графических элементов списка представления (ListView) в терминале MetaTrader 5. Она предоставляет два класса для отображения прокручиваемого списка строк с ассоциированными числовыми значениями, поддержки выделения элементов, цветовой настройки и обработки пользовательских событий.
Основной класс CMyListView наследуется от CWndClient и реализует полный набор операций: добавление, вставку, обновление и удаление элементов, а также выбор по индексу, тексту или значению. Внутренне список использует массивы строк и значений, а для отображения создаётся набор дочерних элементов-строк с поддержкой вертикальной прокрутки.
Класс SNListView расширяет CMyListView, добавляя управление размерами элемента управления и возможность изменения размера шрифта для всех дочерних элементов. Он также предоставляет метод получения списка невыбранных строк. Библиотека предназначена для использования в качестве компонента графического интерфейса пользовательских индикаторов и советников.
Классов: 2 · методов: 26 · конструкторов: 1 · деструкторов: 1 · отдельных функций: 0
class CMyListView
Основной класс списка представления, наследник CWndClient, обеспечивающий отображение списка строк с ассоциированными значениями, прокрутку и выделение элементов.
class SNListView
Расширенный класс списка с управлением размерами и шрифтом, наследник CMyListView.
CMyListView(void)
Конструктор класса CMyListView, инициализирующий внутренние параметры смещения, количества видимых строк, высоты строки и текущего индекса.
~CMyListView(void)
Деструктор класса CMyListView, выполняющий очистку ресурсов.
void ColorListItem(color clBg,color clSel)
Устанавливает цвета фона и выделения для элементов списка.
bool Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2)
Создаёт элемент управления списком на графике с заданными координатами и размерами.
void Destroy(const int reason)
Удаляет элемент управления списком и очищает внутренние данные.
bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
Обрабатывает события графика, перенаправляя клики и другие события в соответствующие обработчики.
bool TotalView(const int value)
Задаёт количество видимых строк в списке; после первого вызова изменение невозможно.
bool AddItem(const string item,const long value)
Добавляет элемент в конец списка (алиас метода ItemAdd для обратной совместимости).
bool ItemAdd(const string item,const long value)
Добавляет элемент в конец списка с ассоциированным значением и обновляет прокрутку.
bool ItemInsert(const int index,const string item,const long value)
Вставляет элемент в указанную позицию списка с ассоциированным значением.
bool ItemUpdate(const int index,const string item,const long value)
Обновляет текст и значение элемента по указанному индексу.
bool ItemDelete(const int index)
Удаляет элемент по указанному индексу из списка.
bool ItemsClear(void)
Очищает все элементы списка и сбрасывает внутренние состояния.
bool IsItem(const int index)
Проверяет наличие непустого элемента по указанному индексу.
bool Update(const int index,const string item,const long value)
Обновляет текст и значение элемента по указанному индексу.
int Current(void)
Возвращает текущий индекс выбранной строки.
string Select(void)
Возвращает текст текущей выбранной строки.
bool Select(const int index)
Выбирает элемент списка по индексу и обновляет отображение.
bool SelectByText(const string text)
Выбирает элемент списка по текстовому содержимому.
bool SelectByValue(const long value)
Выбирает элемент списка по ассоциированному значению.
long Value(void)
Возвращает ассоциированное значение текущей выбранной строки.
bool Show(void)
Делает элемент управления списком видимым и корректирует отображение строк.
void SetSize(int w,int h)
Устанавливает ширину и высоту элемента управления; если параметры равны нулю, используются значения по умолчанию.
int Width()
Возвращает текущую ширину элемента управления.
int Height()
Возвращает текущую высоту элемента управления.
bool Create(long chart,string name,int subwin,int x1,int y1)
Создаёт элемент управления списком с заданными координатами, размерами и позицией на графике.
void FontSize(int isize)
Устанавливает размер шрифта для всех дочерних элементов управления.
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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.