Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

Класс для работы с кнопками произвольной формы - библиотека для MetaTrader 5

Просмотров:
2878
Рейтинг:
(26)
Опубликован:
2015.03.18 09:39
Обновлен:
2016.11.22 07:33
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Класс предназначен для создания интерактивных кнопок на графике цены с различными состояниями.

Был написан для конкурса, организованным щедрым TheXpert. Спасибо.


Иллюстрация работы класса CBtn


Методы класса

Create(long chart_id,int sub_wnd,string name,int x,int y,int dx,int dy) - создание кнопки с параметрами:

  1. идентификатор окна
  2. номер подокна
  3. имя кнопки
  4. координата х
  5. координата y
  6. размер по горизонтали
  7. размер по вертикали

Resources(string img_up,string img_up_active="",string img_dn="",string img_dn_active="",string img_up_disable="",string img_dn_disable="",string img_mask="") - задание изображений для различных состояний кнопки:

  1. обычная отжатая кнопка
  2. кнопка с наведенным указателем
  3. нажатая кнопка
  4. нажатая с наведенным указателем мыши
  5. отключенная (disable) кнопка
  6. маска контура кнопки

SetUseMask(ENUM_USEMASK mask,int x=0,int y=0) - установка маски по цвету указанного пикселя, маска строится из изображения обычной отжатой кнопки.

  1. используемый тип маски
  2. координата х
  3. координата y

SetUseMask(ENUM_USEMASK mask,uint acolor) - установка маски по цвету, маска строится из изображения обычной отжатой кнопки.

  1. используемый тип маски
  2. цвет

SetCorner(ENUM_BASE_CORNER corner) - установка угола графика, к которому привязана кнопка

SetAnchor(ENUM_ANCHOR_POINT anchor) - установка способа привязки кнопки

SetX(int x) - установка координаты х

SetY(int y) - установка координаты y

SetXY(int x,int y) - установка координат х и y одной командой

On(bool state) - установка статуса кнопки (нажата-true/отжата-false)

Enable(bool state) - установка отключения (disable) кнопки

Paint(void) - отрисовка кнопки

Event(int id,long lparam,double dparam,string sparam) - передача кнопке событий
все параметры дублируются из функции OnChartEvent

GetX(void) - получение координаты х

GetY(void) - получение координаты y

GetEnable(void) - получение статуса отключения кнопки

GetOn(void) - получение статуса нажатия кнопки

GetCorner(void) - получение угла графика, к которому привязана кнопка

GetAnchor(void) - получение способа привязки кнопки

AddText(int x,int y,string font_name,int font_size,color text_color,string text) - добавление текста на кнопку

  1. координата х
  2. координата y
  3. имя шрифта
  4. размер шрифта
  5. цвет текста
  6. текст

Text(string text) - обновление текста кнопки (не работает без вызова AddText(...)

Создание кнопки

По умолчанию создается кнопка со следующими параметрами:

  • отжата
  • доступна
  • угол привязки к графику - левый верхний
  • угол привязки кнопки - левый верхний

Установка маски кнопки

По умолчанию создается маска из изображения нормальной отжатой кнопки. Прозрачные пиксели служат маской.

  • UseMask(MASK_STANDALONE_RESOURCE) - для маски используется изображение указанное в Resources(). Если изображение не задано - вся площадь кнопки (прямоугольник) будет считаться рабочей областью.
  • UseMask(MASK_PIXEL,x,y) - для маски используется цвет указанного пикселя. Если цвет пикселя отличается от указанного - он становится маской. Если координаты не указаны, то берется точка с координатами [0,0].
  • UseMask(MASK_COLOR,color) - для маски используется указанный цвет. Если цвет пикселя отличается от указанного - он становится маской. Цвет указывается в формате ARGB.

Пример

//+------------------------------------------------------------------+
//|                                                    3dButtons.mq5 |
//|                                           Copyright 2015, fyords |
//|                           https://login.mql5.com/ru/users/fyords |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, fyords"
#property link      "https://login.mql5.com/ru/users/fyords"
#property version   "1.01"
//+------------------------------------------------------------------+
//| Insert resources                                                 |
//+------------------------------------------------------------------+
#resource "img\\200_1.bmp"
#resource "img\\200_2.bmp"
#resource "img\\200_3.bmp"
#resource "img\\200_4.bmp"
#resource "img\\200_5.bmp"
#resource "img\\200_6.bmp"
//+------------------------------------------------------------------+
#include "Class.mqh"
//+------------------------------------------------------------------+
enum Adjust
  {
   UpperLeft,
   UpperRight,
   LowerLeft,
   LowerRight
  };
//+------------------------------------------------------------------+
//| Input property                                                   |
//+------------------------------------------------------------------+
input Adjust adj_corner=UpperLeft;     //Corner
//+------------------------------------------------------------------+
//| Global variables                                                 |
//+------------------------------------------------------------------+
CBtn *btn[];

int num_buttons;
//+------------------------------------------------------------------+
//| Initialization function                                          |
//+------------------------------------------------------------------+
int OnInit()
  {
   long wnd=ChartID();
   int sub_wnd=ChartWindowOnDropped();

   ArrayFree(btn);
   int n=0;
   num_buttons=0;

   for(int y=0;y<3;y++)
     {
      for(int x=0;x<3;x++)
        {
         ArrayResize(btn,n+1);
         btn[n]=new CBtn;
         btn[n].Create(wnd,sub_wnd,"3dButtons_"+(string)MathRand(),x*152+10,y*152+10,200,200);
         btn[n].Resources("img\\200_1.bmp","img\\200_2.bmp","img\\200_3.bmp","img\\200_4.bmp","img\\200_5.bmp","img\\200_6.bmp");
         btn[n].AddText(80,80,"Arial",25,clrWhite,"Button"+(string)(n+1));
         switch(adj_corner)
           {
            case UpperLeft:
               btn[n].SetAnchor(ANCHOR_LEFT_UPPER);
               btn[n].SetCorner(CORNER_LEFT_UPPER);
               break;
            case UpperRight:
               btn[n].SetAnchor(ANCHOR_RIGHT_UPPER);
               btn[n].SetCorner(CORNER_RIGHT_UPPER);
               break;
            case LowerLeft:
               btn[n].SetAnchor(ANCHOR_LEFT_LOWER);
               btn[n].SetCorner(CORNER_LEFT_LOWER);
               break;
            case LowerRight:
               btn[n].SetAnchor(ANCHOR_RIGHT_LOWER);
               btn[n].SetCorner(CORNER_RIGHT_LOWER);
               break;
           }
         btn[n].Paint();
         n++;
        }
     }
   ChartRedraw();

   num_buttons=ArraySize(btn);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function                                        |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   for(int i=0;i<num_buttons;i++) delete btn[i];
   ArrayFree(btn);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   for(int i=0;i<num_buttons;i++) btn[i].Event(id,lparam,dparam,sparam);
  }
Leading_Signal Leading_Signal

Индикатор Leading_Signal отображает информацию о тренде в виде двухцветной линии и о сигналах для сделок при помощи индикатора Leading.

HLR_Signal HLR_Signal

Индикатор HLR_Signal отображает информацию о тренде в виде двухцветной линии и о сигналах для сделок при помощи индикатора HLR.

Класс СBmpButtonTransparent Класс СBmpButtonTransparent

Класс прозрачной кнопки.

TrendlessAG_HTF TrendlessAG_HTF

Индикатор TrendlessAG с возможностью изменения таймфрейма индикатора во входных параметрах.