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

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 SNScroll(void)

Конструктор класса SNScroll.

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

Деструктор класса SNScroll.

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

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

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

Обработчик событий графика для взаимодействия с полосой прокрутки.

Метод · SNScroll int MinPos(void)

Получение минимального значения позиции.

Метод · SNScroll void MinPos(const int value)

Установка минимального значения позиции.

Метод · SNScroll int MaxPos(void)

Получение максимального значения позиции.

Метод · SNScroll void MaxPos(const int value)

Установка максимального значения позиции.

Метод · SNScroll int CurrPos(void)

Получение текущей позиции.

Метод · SNScroll bool CurrPos(int value)

Установка текущей позиции с проверкой допустимых значений.

Метод · SNScroll void OnDeinit(int chart_id,int reason)

Удаление графических объектов полосы прокрутки при деинициализации.

Конструктор · SNScrollV SNScrollV(void)

Конструктор класса SNScrollV.

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

Деструктор класса SNScrollV.

Конструктор · SNScrollH SNScrollH(void)

Конструктор класса SNScrollH.

Деструктор · 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 и перейдите к оплате.

Стоимость полного кода
1 274,50₽ ≈ $15.58