class SNScroll
Базовый класс полосы прокрутки, предоставляющий создание, обработку событий и управление графическими объектами.
Сообщите нам, если считаете, что материал размещён без разрешения.
Обращение по товару «scrolls.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Файл scrolls.mqh представляет собой библиотеку MQL5, предоставляющую классы для создания полос прокрутки в графическом интерфейсе приложений. Библиотека содержит три класса: базовый SNScroll и его наследники SNScrollV (вертикальная полоса прокрутки) и SNScrollH (горизонтальная полоса прокрутки).
Базовый класс SNScroll наследуется от CWndContainer и реализует создание, обработку событий и удаление графических объектов. Он предоставляет методы для установки минимального и максимального значений, а также текущей позиции полосы прокрутки.
Классы SNScrollV и SNScrollH реализуют специфичную логику отрисовки кнопок, ползунка, перетаскивания и обработки изменения позиции для вертикальной и горизонтальной ориентаций соответственно.
Библиотека является частью стандартных компонентов MetaQuotes Software Corp. и предназначена для использования в качестве элементов управления GUI в MQL5-приложениях.
Классов: 3 · методов: 9 · конструкторов: 3 · деструкторов: 3 · отдельных функций: 0
class SNScroll
Базовый класс полосы прокрутки, предоставляющий создание, обработку событий и управление графическими объектами.
class SNScrollV
Класс вертикальной полосы прокрутки, расширяющий базовый SNScroll.
class SNScrollH
Класс горизонтальной полосы прокрутки, расширяющий базовый SNScroll.
SNScroll(void)
Конструктор класса SNScroll.
~SNScroll(void)
Деструктор класса SNScroll.
bool Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2)
Создание полосы прокрутки на графике с заданными координатами.
bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
Обработчик событий графика для взаимодействия с полосой прокрутки.
int MinPos(void)
Получение минимального значения позиции.
void MinPos(const int value)
Установка минимального значения позиции.
int MaxPos(void)
Получение максимального значения позиции.
void MaxPos(const int value)
Установка максимального значения позиции.
int CurrPos(void)
Получение текущей позиции.
bool CurrPos(int value)
Установка текущей позиции с проверкой допустимых значений.
void OnDeinit(int chart_id,int reason)
Удаление графических объектов полосы прокрутки при деинициализации.
SNScrollV(void)
Конструктор класса SNScrollV.
~SNScrollV(void)
Деструктор класса SNScrollV.
SNScrollH(void)
Конструктор класса SNScrollH.
~SNScrollH(void)
Деструктор класса SNScrollH.
#ifndef __SOVETNIKOV_COMBOBOX_21hsadjs423dfdsf
#define __SOVETNIKOV_COMBOBOX_21hsadjs423dfdsf
#include <sovetnikovGUI\defines.mqh>
#include <Controls\\WndContainer.mqh>
#include <Controls\\Panel.mqh>
#include <Controls\\BmpButton.mqh>
#resource "\\Include\\Controls\\res\\Up.bmp"
#resource "\\Include\\Controls\\res\\ThumbVert.bmp"
#resource "\\Include\\Controls\\res\\Down.bmp"
#resource "\\Include\\Controls\\res\\Left.bmp"
#resource "\\Include\\Controls\\res\\ThumbHor.bmp"
#resource "\\Include\\Controls\\res\\Right.bmp"
class SNScroll : public CWndContainer
{
protected:
CPanel m_back; // the "scrollbar background" object
CBmpButton m_inc; // the "increment button" object ("down" for vertical scrollbar, "right" for horizontal scrollbar)
CBmpButton m_dec; // the "decrement button" object ("up" for vertical scrollbar, "left" for horizontal scrollbar)
CBmpButton m_thumb; // the "scroll box" object
int m_min_pos; // minimum value
int m_max_pos; // maximum value
int m_curr_pos; // current value
public:
SNScroll(void);
~SNScroll(void);
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 bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam);
int MinPos(void) const { return(m_min_pos); }
void MinPos(const int value);
int MaxPos(void) const { return(m_max_pos); }
void MaxPos(const int value);
int CurrPos(void) const { return(m_curr_pos); }
bool CurrPos(int value);
int m_width;
int m_height;
int m_x;
int m_y;
/*
void SetSize(int w=0,int h=0) {if(w!=0) m_width=w; else m_width=16; if(h!=0) m_height=h; else m_height=CONTROLS_SPIN_MIN_HEIGHT;}
int Width() {return m_width;}
int Height() {return m_height;}
bool Create(long chart,string name,int subwin,int x1,int y1)
{
bool bCreate=Create(chart,name,subwin,x1,y1,x1+m_width,y1+m_height);
Move(x1,y1);
return bCreate;
}*/
virtual void OnDeinit(int chart_id=0,int reason=0)
{
Destroy(reason);
m_back.Destroy(reason);
m_inc.Destroy(reason);
m_dec.Destroy(reason);
m_thumb.Destroy(reason);
ObjectDelete(chart_id,m_name);
ObjectDelete(chart_id,m_name+"Back");
ObjectDelete(chart_id,m_name+"Inc");
ObjectDelete(chart_id,m_name+"Dec");
ObjectDelete(chart_id,m_name+"Thumb");
}
protected:
virtual bool CreateBack(void);
virtual bool CreateInc(void) { return(true); }
virtual bool CreateDec(void) { return(true); }
virtual bool CreateThumb(void) { return(true); }
virtual bool OnClickInc(void);
virtual bool OnClickDec(void);
virtual bool OnShow(void);
virtual bool OnHide(void);
virtual bool OnChangePos(void) { return(true); }
virtual bool OnThumbDragStart(void) { return(true); }
virtual bool OnThumbDragProcess(void) { return(true); }
virtual bool OnThumbDragEnd(void) { return(true); }
virtual int CalcPos(const int coord) { return(0); }
};
EVENT_MAP_BEGIN(SNScroll)
EVENT_CLICK(m_inc,OnClickInc())
EVENT_CLICK(m_dec,OnClickDec())
ON_EVENT(ON_DRAG_START,m_thumb,OnThumbDragStart)
ON_EVENT_PTR(ON_DRAG_PROCESS,m_drag_object,OnThumbDragProcess)
ON_EVENT_PTR(ON_DRAG_END,m_drag_object,OnThumbDragEnd)
EVENT_MAP_END(CWndContainer)
SNScroll::SNScroll(void) : m_curr_pos(0),
m_min_pos(0),
m_max_pos(0)
{
}
SNScroll::~SNScroll(void)
{
}
bool SNScroll::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2)
{
m_chart_id=chart;
m_name=name;
m_subwin=subwin;
if(!CWndContainer::Create(chart,name,subwin,x1,y1,x2,y2)){
return(false);
}
m_id=GetTickCount();
if(!CreateBack()){
return(false);
}
if(!CreateInc()){
return(false);
}
if(!CreateDec()){
return(false);
}
if(!CreateThumb()){
return(false);
}
long iid=m_id;
m_back.Id(++iid);
m_inc.Id(++iid);
m_dec.Id(++iid);
m_thumb.Id(++iid);
return(true);
}
bool SNScroll::CreateBack(void)
{
if(!m_back.Create(m_chart_id,m_name+"Back",m_subwin,0,0,Width(),Height())){
return(false);
}
if(!m_back.ColorBackground(CONTROLS_SCROLL_COLOR_BG))
return(false);
if(!m_back.ColorBorder(CONTROLS_SCROLL_COLOR_BORDER))
return(false);
if(!Add(m_back))
return(false);
return(true);
}
bool SNScroll::CurrPos(int value)
{
if(value<m_min_pos)
value=m_min_pos;
if(value>m_max_pos)
value=m_max_pos;
if(m_curr_pos!=value)
{
m_curr_pos=value;
return(OnChangePos());
}
return(false);
}
void SNScroll::MinPos(const int value)
{
if(m_min_pos!=value)
{
m_min_pos=value;
CurrPos(m_curr_pos);
}
}
void SNScroll::MaxPos(const int value)
{
if(m_max_pos!=value)
{
m_max_pos=value;
CurrPos(m_curr_pos);
}
}
bool SNScroll::OnShow(void)
{
if(m_id==CONTROLS_INVALID_ID)
return(true);
EventChartCustom(INTERNAL_EVENT,ON_SHOW,m_id,0.0,m_name);
return(true);
}
bool SNScroll::OnHide(void)
{
if(m_id==CONTROLS_INVALID_ID)
return(true);
EventChartCustom(INTERNAL_EVENT,ON_HIDE,m_id,0.0,m_name);
return(true);
}
bool SNScroll::OnClickInc(void)
{
if(!CurrPos(m_curr_pos+1))
return(true);
EventChartCustom(INTERNAL_EVENT,ON_SCROLL_INC,m_id,0.0,m_name);
return(true);
}
bool SNScroll::OnClickDec(void)
{
if(!CurrPos(m_curr_pos-1))
return(true);
EventChartCustom(INTERNAL_EVENT,ON_SCROLL_DEC,m_id,0.0,m_name);
return(true);
}
class SNScrollV : public SNScroll
{
public:
SNScrollV(void);
~SNScrollV(void);
protected:
virtual bool CreateInc(void);
virtual bool CreateDec(void);
virtual bool CreateThumb(void);
virtual bool OnResize(void);
virtual bool OnChangePos(void);
virtual bool OnThumbDragStart(void);
virtual bool OnThumbDragProcess(void);
virtual bool OnThumbDragEnd(void);
virtual int CalcPos(const int coord);
};
SNScrollV::SNScrollV(void)
{
}
SNScrollV::~SNScrollV(void)
{
}
bool SNScrollV::CreateInc(void)
{
int x1=CONTROLS_BORDER_WIDTH;
int y1=Height()-CONTROLS_SCROLL_SIZE+CONTROLS_BORDER_WIDTH;
int x2=x1+CONTROLS_BUTTON_SIZE;
int y2=y1+CONTROLS_BUTTON_SIZE;
if(!m_inc.Create(m_chart_id,m_name+"Inc",m_subwin,x1,y1,x2,y2))
return(false);
if(!m_inc.BmpNames("::Include\\Controls\\res\\Down.bmp"))
return(false);
if(!Add(m_inc))
return(false);
m_inc.PropFlags(WND_PROP_FLAG_CLICKS_BY_PRESS);
return(true);
}
bool SNScrollV::CreateDec(void)
{
int x1=CONTROLS_BORDER_WIDTH;
int y1=CONTROLS_BORDER_WIDTH;
int x2=x1+CONTROLS_BUTTON_SIZE;
int y2=y1+CONTROLS_BUTTON_SIZE;
if(!m_dec.Create(m_chart_id,m_name+"Dec",m_subwin,x1,y1,x2,y2))
return(false);
if(!m_dec.BmpNames("::Include\\Controls\\res\\Up.bmp"))
return(false);
if(!Add(m_dec))
return(false);
m_dec.PropFlags(WND_PROP_FLAG_CLICKS_BY_PRESS);
return(true);
}
bool SNScrollV::CreateThumb(void)
{
int x1=CONTROLS_BORDER_WIDTH;
int y1=CONTROLS_SCROLL_SIZE-CONTROLS_BORDER_WIDTH;
int x2=x1+CONTROLS_BUTTON_SIZE;
int y2=y1+CONTROLS_SCROLL_THUMB_SIZE;
if(!m_thumb.Create(m_chart_id,m_name+"Thumb",m_subwin,x1,y1,x2,y2))
return(false);
if(!m_thumb.BmpNames("::Include\\Controls\\res\\ThumbVert.bmpПоказано первые 50% кода (символов: 12745)
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.