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

 
Igor Makanu:

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

Ну хорошо. Допустим навешали вот таких вот костылей.

А если нужно от -5 до 100?

Опять будем надо кодом издеваться, ведь это же не выход?

 
Renat Akhtyamov:

Опять будем надо кодом издеваться, ведь это же не выход?

каких костылей? - это все стандартно, добавьте смещение в настройки

или Вы мне предлагаете еще раз:


Igor Makanu:

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

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

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

Renat Akhtyamov:

Опять будем надо кодом издеваться, ведь это же не выход?

ЗЫ: я не стал в input настройки выносить значение ScrollMax , подозреваю, что вопросы будут еще похлеще )))

 
Igor Makanu:

ЗЫ: я не стал в input настройки выносить значение ScrollMax , подозреваю, что вопросы будут еще похлеще )))

ага ;)

по сути у полосы прокрутки всего лишь два параметра - минимум и максимум

гоняем от -5 до +25 и получаем от -15 до +15

ну и как твоим кодом пользоваться?

еще прикольнее получается от -100 до -20
 
Renat Akhtyamov:

ага ;)

по сути у полосы прокрутки всего лишь два параметра - минимум и максимум

гоняем от -5 до +25 и получаем от -15 до +15

ну и как твоим кодом пользоваться?

хм, ну как бы код вооооооообще никак не мой, он больше твой )))

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

#define  ScrollMax   30
#define  ScrollShift 10
.....
int         GetScroll(){return(m_scroll_v.CurrPos()-m_shift + ScrollShift); }

 ScrollMax и ScrollShift  нужно в input вынести, но думаю не получится вот так просто у тебя это сделать ;)

 
Igor Makanu:

хм, ну как бы код вооооооообще никак не мой, он больше твой )))

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

 ScrollMax и ScrollShift  нужно в input вынести, но думаю не получится вот так просто у тебя это сделать ;)

ну правильно

как ты посчитал 10 и 30?

а если функцию обратного пересчета входных параметров минимума и максимум запилить

 
Renat Akhtyamov:

как ты посчитал 10 и 30?

хм, тебе нужно что? 

-5 до +25 , сколько чисел в этом числовом ряду? (ноль он и в Африке ноль), вот по моему и получим 30 чисел ряд , но мы делим пополам ряд - формула которую ночь писал, т.е. будет скрол на выдавать -15 до + 15

ОК, есть теперь скрол от 15 до + 15 , что нужно сделать чтобы сместить значения в ряде до +25 ?

;)

 
Igor Makanu:

хм, тебе нужно что? 

-5 до +25 , сколько чисел в этом числовом ряду? (ноль он и в Африке ноль), вот по моему и получим 30 чисел ряд , но мы делим пополам ряд - формула которую ночь писал, т.е. будет скрол на выдавать -15 до + 15

ОК, есть теперь скрол от 15 до + 15 , что нужно сделать чтобы сместить значения в ряде до +25 ?

;)

Input int Min

Input int Max

ScrollMax=Max-Min

ScrollShift=Min+ScrollMax/2;

если такое применить в твой код, мы получаем универсальный элемент управления?

 
Renat Akhtyamov:

Input int Min

Input int Max

ScrollMax=Max-Min

ScrollShift=Min+ScrollMax/2;

если такое применить в твой код, мы получаем универсальный элемент управления?

ну проверь в чем проблема то?

но сначала попробуй с input разобраться, думаю не все гладко пойдет, вернее не так как ожидал 

 
Igor Makanu:

ну проверь в чем проблема то?

но сначала попробуй с input разобраться, думаю не все гладко пойдет, вернее не так как ожидал 

//+------------------------------------------------------------------+
//|                                                     ScrollsH.mq4 |
//+------------------------------------------------------------------+
#property version   "1.00"
#property description "Панель индикации и диалогов управления. Демонстрация работы класса CScrollH"
extern int  sMin=-15;//минимум полосы прокрутки
extern int  sMax=10;//максимум полосы прокрутки
#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);
         int         GetScroll(){return(m_scroll_v.CurrPos()-m_shift + sMin+(sMax-sMin)/2); }
   //--- 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(sMax-sMin);
   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);
  }

примерно так

Спасибо!

Файлы:
ScrollsH.mq4  16 kb
Причина обращения: