Класс СScrollH - страница 2

 
Renat Akhtyamov:


Очень жаль, что не стали заниматься.

Полезная вещица.

Допустим нужно прокрутить какой нибудь параметр индикатора "от и до" и тут же визульно прикинуть результат.

Ренат, пишу последний раз, вы в жизни не понимаете одного важного момента. Если просите о помощи, уважайте время людей, которые могут помочь.

Я бы в первом посте написал вот так:

Я создал эксперт ControlsScrollH.mq5, вот его код, файл прилагаю в аттаче.

// прилагаем код тут или в аттаче, если он очень большой

Можно ли делать так, чтобы в выделенной строке задавать отрицательное значение?

bool CControlsDialog::CreateScrollsH(void)
  {
//--- coordinates
   int x1=INDENT_LEFT;
   int y1=INDENT_TOP;
   int x2=x1+3*BUTTON_WIDTH;
   int y2=y1+18;
//--- create
   if(!m_scroll_v.Create(m_chart_id,m_name+"ScrollsH",m_subwin,x1,y1,x2,y2))
      return(false);
//--- set up the scrollbar
   m_scroll_v.MinPos(0);
//--- set up the scrollbar
   m_scroll_v.MaxPos(10);
   if(!Add(m_scroll_v))
      return(false);
   Comment("Позиция полосы прокрутки ",m_scroll_v.CurrPos());
//--- succeed
   return(true);
  }

И тогда спецы быстренько откроют ваш файл в редакторе, во всем разберутся и напишут ответ. А ваш подход - давайте-ка, быстренько догадайтесь холопы, что барину надо и ответьте. Ведь я пуп земли и царь Вселенной, мне все должны по жизни )))

С таким подходом никто вам помогать не будет, один я, дурак, тут редко появляюсь и ввязался.

Меняйте подход к людям, короче. Уважайте чужое время.

 
Alexey Navoykov:
Ай-яй-яй! Ну зачем вы отняли 20 минут жизни у Алексея? Он за это время мог сочинить великолепную историю про баб. Теперь это невосполнимая потеря для мирового искусства

У вас женщины нет? Так выйдите на улицу и познакомьтесь, делов-то.

За 30 уже минут я мог бы написать много кода в анализаторе портфельной торговли в Матлабе, над которым с утра работаю.

 
Igor Makanu:

ну и крутите что мешает?

есть методы Get чтобы узнать мин/макс ползунка https://www.mql5.com/ru/docs/standardlibrary/controls/cscroll/cscrollminpos

нужно отрицательные значения, используйте:       CurrPos() - ( MaxPos() - MinPos () )/2.0  

или для зеркального значения:   ( MaxPos() - MinPos () )/2.0  -  CurrPos()   

минус то зачем у скрола должен быть?

ЗЫ:  MaxPos() и MinPos () подозреваю, что у Вас не будут изменяться, сохраните их  заранее и используйте запомненные значения

допустим нужно менять параметр не от нуля до 10, а от минус 5 до плюс 5
 
Renat Akhtyamov:
допустим нужно менять параметр не от нуля до 10, а от минус 5 до плюс 5

ять! проверь!


ЗЫ: мин = 0, мах = 10, вот твой CurrPos -- > 0,1.2.3.4.5.6.7.8.9.10 . Вот моя формула....  сколько будет 10/2 ?

а если CurrPos = 10 и минус 5 = ?   

а если CurrPos = 2 и минус  5 = ?   

 
Igor Makanu:

ять! проверь!


ЗЫ: мин = 0, мах = 10, вот твой CurrPos -- > 0,1.2.3.4.5.6.7.8.9.10 . Вот моя формула....  сколько будет 10/2 ?

а если CurrPos = 10 и минус 5 = ?   

а если CurrPos = 2 и минус  5 = ?   

не, подожди

//--- set up the scrollbar
   m_scroll_v.MinPos(0);
//--- set up the scrollbar
   m_scroll_v.MaxPos(10);

Я правильно понимаю, что "set up" на английском - это установить?

в данном случае min и max

Вопрос: как установить min = -5 ?

---

CurrPos() - ( MaxPos() - MinPos () )/2.0  при max=10 и min=0 даст неверный результат

 
Renat Akhtyamov:

не, подожди

//--- set up the scrollbar
   m_scroll_v.MinPos(0);
//--- set up the scrollbar
   m_scroll_v.MaxPos(10);

Я правильно понимаю, что "set up" на английском - это установить?

в данном случае min и max

Вопрос: как установить min = -5 ?

я не пользовался никогда СScrollH , как и не проверял твой код

есть конкретная проблема - есть решение!

мое решение будет работать

или вопрос из разряда " как решить " перетекает в " как уйти увлекательный мир СБ MQL и не потерять свои мысли там? " - это уже без меня


Renat Akhtyamov:

CurrPos() - ( MaxPos() - MinPos () )/2.0  при max=10 и min=0 даст неверный результат

на единичку могу ошибиться, но сути это не меняет

 
Igor Makanu:

я не пользовался никогда СScrollH , как и не проверял твой код

есть конкретная проблема - есть решение!

мое решение будет работать

или вопрос из разряда " как решить " перетекает в " как уйти увлекательный мир СБ MQL и не потерять свои мысли там? " - это уже без меня

да я ничего не писал, код из документации

полезный, ничего не имею против

просто возник вопрос - как реализовать
 
Renat Akhtyamov:

просто возник вопрос - как реализовать

подставь мои формулы в коммент!

ЗЫ: только вот не пиши через минуту, не компилируется, это вопрос уже из другой плоскости как сделать )))

 
Igor Makanu:

подставь мои формулы в коммент!

ЗЫ: только вот не пиши через минуту, не компилируется, это вопрос уже из другой плоскости как сделать )))

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

но нужно параметр минимум и максимум поменять, а не в комментарий всунуть то что хочешь увидеть, как ты предлагаешь

там еще проще CurrPos() - 5, если чо

--------

сделал, работает (почти):



//+------------------------------------------------------------------+
//|                                              ControlsScrollH.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property description "Панель индикации и диалогов управления. Демонстрация работы класса CScrollH"
#include <Controls\Dialog.mqh>
#include <Controls\Scrolls.mqh>
//+------------------------------------------------------------------+
//| defines                                                          |
//+------------------------------------------------------------------+
//--- indents and gaps
#define INDENT_LEFT                         (11)      // indent from left (with allowance for border width)
#define INDENT_TOP                          (11)      // indent from top (with allowance for border width)
#define INDENT_RIGHT                        (11)      // indent from right (with allowance for border width)
#define INDENT_BOTTOM                       (11)      // indent from bottom (with allowance for border width)
#define CONTROLS_GAP_X                      (5)       // gap by X coordinate
#define CONTROLS_GAP_Y                      (5)       // gap by Y coordinate
//--- for buttons
#define BUTTON_WIDTH                        (100)     // size by X coordinate
#define BUTTON_HEIGHT                       (20)      // size by Y coordinate
//--- for the indication area
#define EDIT_HEIGHT                         (20)      // size by Y coordinate
//--- for group controls
#define GROUP_WIDTH                         (150)     // size by X coordinate
#define LIST_HEIGHT                         (179)     // size by Y coordinate
#define RADIO_HEIGHT                        (56)      // size by Y coordinate
#define CHECK_HEIGHT                        (93)      // size by Y coordinate
//+------------------------------------------------------------------+
//| Class CControlsDialog                                            |
//| Usage: main dialog of the Controls application                   |
//+------------------------------------------------------------------+
class CControlsDialog : public CAppDialog
  {
private:
   CScrollH          m_scroll_v;                     // CScrollH объект
 
public:
                     CControlsDialog(void);
                    ~CControlsDialog(void);
   //--- create
   virtual bool      Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2);
   //--- chart event handler
   virtual bool      OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam);
 
protected:
   //--- create dependent controls
   bool              CreateScrollsH(void);
   //--- handlers of the dependent controls events
   void              OnScrollInc(void);
   void              OnScrollDec(void);
  };
//+------------------------------------------------------------------+
//| Event Handling                                                   |
//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CControlsDialog)
ON_EVENT(ON_SCROLL_INC,m_scroll_v,OnScrollInc)
ON_EVENT(ON_SCROLL_DEC,m_scroll_v,OnScrollDec)
EVENT_MAP_END(CAppDialog)
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CControlsDialog::CControlsDialog(void)
  {
  }
//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CControlsDialog::~CControlsDialog(void)
  {
  }
//+------------------------------------------------------------------+
//| Create                                                           |
//+------------------------------------------------------------------+
bool CControlsDialog::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2)
  {
   if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
      return(false);
//--- create dependent controls
   if(!CreateScrollsH())
      return(false);
//--- succeed
   return(true);
  }
//+------------------------------------------------------------------+
//| Create the CScrollsH object                                      |
//+------------------------------------------------------------------+
bool CControlsDialog::CreateScrollsH(void)
  {
//--- coordinates
   int x1=INDENT_LEFT;
   int y1=INDENT_TOP;
   int x2=x1+3*BUTTON_WIDTH;
   int y2=y1+18;
//--- create
   if(!m_scroll_v.Create(m_chart_id,m_name+"ScrollsH",m_subwin,x1,y1,x2,y2))
      return(false);
//--- set up the scrollbar
   m_scroll_v.MinPos(-5);
//--- set up the scrollbar
   m_scroll_v.MaxPos(5);
   if(!Add(m_scroll_v))
      return(false);
   Comment("Позиция полосы прокрутки ",m_scroll_v.CurrPos()+m_scroll_v.MinPos());
//--- succeed
   return(true);
  }
//+------------------------------------------------------------------+
//| Event handler                                                    |
//+------------------------------------------------------------------+
void CControlsDialog::OnScrollInc(void)
  {
   Comment("Позиция полосы прокрутки ",m_scroll_v.CurrPos()+m_scroll_v.MinPos());
  }
//+------------------------------------------------------------------+
//| Event handler                                                    |
//+------------------------------------------------------------------+
void CControlsDialog::OnScrollDec(void)
  {
   Comment("Позиция полосы прокрутки ",m_scroll_v.CurrPos()+m_scroll_v.MinPos());
  }
//+------------------------------------------------------------------+
//| Global Variables                                                 |
//+------------------------------------------------------------------+
CControlsDialog ExtDialog;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create application dialog
   if(!ExtDialog.Create(0,"Controls",0,40,40,380,344))
      return(INIT_FAILED);
//--- run application
   ExtDialog.Run();
//--- succeed
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- очистим комментарии
   Comment("");
//--- destroy dialog
   ExtDialog.Destroy(reason);
  }
//+------------------------------------------------------------------+
//| Expert chart event function                                      |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // event ID 
                  const long& lparam,   // event parameter of the long type
                  const double& dparam, // event parameter of the double type
                  const string& sparam) // event parameter of the string type
  {
   ExtDialog.ChartEvent(id,lparam,dparam,sparam);
  }

а вот например от -15 до -5, опять запнулся код...

а от -5 до +5, кнопка сдвига ползунка вправо, работает только от -5 до 0


;)

 
Renat Akhtyamov:

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

а от -5 до +5, кнопка сдвига ползунка вправо, работает только от -5 до 0

даже не знаю как еще обьяснять, и так и эдак обьяснял, вот в терминале код твой написал, у меня работает от -25 до +25

//+------------------------------------------------------------------+
//|                                              ControlsScrollH.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. | 
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp." 
#property link      "https://www.mql5.com"
#property version   "1.00"
#property description "Панель индикации и диалогов управления. Демонстрация работы класса CScrollH" 
#define  ScrollMax  50


#include <Controls\Dialog.mqh>
#include <Controls\Scrolls.mqh>
//+------------------------------------------------------------------+
//| defines                                                          | 
//+------------------------------------------------------------------+
//--- indents and gaps
#define INDENT_LEFT                         (11)      // indent from left (with allowance for border width) 
#define INDENT_TOP                          (11)      // indent from top (with allowance for border width) 
#define INDENT_RIGHT                        (11)      // indent from right (with allowance for border width) 
#define INDENT_BOTTOM                       (11)      // indent from bottom (with allowance for border width) 
#define CONTROLS_GAP_X                      (5)       // gap by X coordinate 
#define CONTROLS_GAP_Y                      (5)       // gap by Y coordinate 
//--- for buttons
#define BUTTON_WIDTH                        (100)     // size by X coordinate 
#define BUTTON_HEIGHT                       (20)      // size by Y coordinate 
//--- for the indication area
#define EDIT_HEIGHT                         (20)      // size by Y coordinate 
//--- for group controls
#define GROUP_WIDTH                         (150)     // size by X coordinate 
#define LIST_HEIGHT                         (179)     // size by Y coordinate 
#define RADIO_HEIGHT                        (56)      // size by Y coordinate 
#define CHECK_HEIGHT                        (93)      // size by Y coordinate 
//+------------------------------------------------------------------+
//| Class CControlsDialog                                            | 
//| Usage: main dialog of the Controls application                   | 
//+------------------------------------------------------------------+
class CControlsDialog : public CAppDialog
  {
private:
   CScrollH          m_scroll_v;                     // CScrollH объект 
   int               m_shift;
public:
                     CControlsDialog(void);
                    ~CControlsDialog(void);
         int         GetScroll(){return(m_scroll_v.CurrPos()-m_shift); }
   //--- create
   virtual bool      Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2); 
   //--- chart event handler
   virtual bool      OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam); 
 
protected:
   //--- create dependent controls
   bool              CreateScrollsH(void); 
   //--- handlers of the dependent controls events
   void              OnScrollInc(void); 
   void              OnScrollDec(void);
  };
//+------------------------------------------------------------------+
//| Event Handling                                                   | 
//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CControlsDialog)
ON_EVENT(ON_SCROLL_INC,m_scroll_v,OnScrollInc)
ON_EVENT(ON_SCROLL_DEC,m_scroll_v,OnScrollDec)
EVENT_MAP_END(CAppDialog)
//+------------------------------------------------------------------+
//| Constructor                                                      | 
//+------------------------------------------------------------------+
CControlsDialog::CControlsDialog(void)
  { 
  }
//+------------------------------------------------------------------+
//| Destructor                                                       | 
//+------------------------------------------------------------------+
CControlsDialog::~CControlsDialog(void)
  {
  }
//+------------------------------------------------------------------+
//| Create                                                           | 
//+------------------------------------------------------------------+
bool CControlsDialog::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2) 
  {
   if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
      return(false);
//--- create dependent controls 
   if(!CreateScrollsH())
      return(false);
//--- succeed
   return(true); 
  }
//+------------------------------------------------------------------+
//| Create the CScrollsH object                                      | 
//+------------------------------------------------------------------+
bool CControlsDialog::CreateScrollsH(void)
  { 
//--- coordinates
   int x1=INDENT_LEFT;
   int y1=INDENT_TOP;
   int x2=x1+3*BUTTON_WIDTH; 
   int y2=y1+18;
//--- create
   if(!m_scroll_v.Create(m_chart_id,m_name+"ScrollsH",m_subwin,x1,y1,x2,y2)) 
      return(false);
//--- set up the scrollbar
   m_scroll_v.MinPos(0);
//--- set up the scrollbar 
   m_scroll_v.MaxPos(ScrollMax);
   if(!Add(m_scroll_v))
      return(false);
   m_shift =(int) (m_scroll_v.MaxPos()-m_scroll_v.MinPos())/2.0;
   Comment("Позиция полосы прокрутки ",GetScroll()); 
//--- succeed
   return(true);
  }
//+------------------------------------------------------------------+
//| Event handler                                                    | 
//+------------------------------------------------------------------+
void CControlsDialog::OnScrollInc(void)
  { 
   Comment("Позиция полосы прокрутки ",GetScroll());
  }
//+------------------------------------------------------------------+
//| Event handler                                                    | 
//+------------------------------------------------------------------+
void CControlsDialog::OnScrollDec(void)
  { 
   Comment("Позиция полосы прокрутки ",GetScroll());
  }
//+------------------------------------------------------------------+
//| Global Variables                                                 | 
//+------------------------------------------------------------------+
CControlsDialog ExtDialog;
//+------------------------------------------------------------------+
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create application dialog 
   if(!ExtDialog.Create(0,"Controls",0,40,40,380,344))
      return(INIT_FAILED);
//--- run application
   ExtDialog.Run(); 
//--- succeed
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 | 
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- очистим комментарии 
   Comment("");
//--- destroy dialog
   ExtDialog.Destroy(reason);
  }
//+------------------------------------------------------------------+
//| Expert chart event function                                      | 
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // event ID  
                  const long& lparam,   // event parameter of the long type
                  const double& dparam, // event parameter of the double type 
                  const string& sparam) // event parameter of the string type
  {
   ExtDialog.ChartEvent(id,lparam,dparam,sparam); 
  }