Группа "Стол заказов MQL"

Рейтинг 2088



РЕКОМЕНДУЮ



Зафиксировать положение объекта

Добрый день, на ФОРУМЕ создал ветку, в рамках заказа прошу сделать так чтобы при изменении размера окна терминала ОБЪЕКТ не менял положение, а был зафиксирован на определенном расстоянии от правого края. Спасибо.

int Width  = 0;
int Height = 0;
int Count  = 0; // Для счетчика нажатий
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  
  Width=(ushort)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);   // получаем Ширину окна
  Height=(ushort)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS); // получаем Высоту окна;
  
  ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);

  ObjectCreate(0,"sell",OBJ_BUTTON,0,0,0);
//--- установим координаты объекта 
   ObjectSetInteger(0,"sell",OBJPROP_XDISTANCE,Width-200);   // Динамичное расположение. Зависит от ширины окна
   ObjectSetInteger(0,"sell",OBJPROP_YDISTANCE,Height-200);  // Динамичное расположение. Зависит от высоты окна
   ObjectSetInteger(0,"sell",OBJPROP_CORNER,CORNER_LEFT_UPPER); 
//--- установим размеры объекта 
   ObjectSetInteger(0,"sell",OBJPROP_XSIZE,50);              // Заранее знаю размер объекта
   ObjectSetInteger(0,"sell",OBJPROP_YSIZE,50);              // 
//--- установим текст 
   ObjectSetString(0,"sell",OBJPROP_TEXT,"SELL"); 
//--- установим начлаьное положение кнопки 
   ObjectSetInteger(0,"sell",OBJPROP_STATE,false);
   
   
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id,

                  const long &lparam,

                  const double &dparam,

                  const string &sparam)

{

  Width=(ushort)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);   // еще раз получаем Ширину окна. Вдруг его изменили. Поэтому также стоит перерисовать объект
  Height=(ushort)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS); // еще раз получаем Высоту окна. Вдруг его изменили. Поэтому также стоит перерисовать объект
                                                            // В этом коде я не перерисовываю объект. А вам нужно. Изменяя размер окна - меняется зона для отслеживания клика

  if(id==CHARTEVENT_MOUSE_MOVE && sparam == 1 && lparam >= Width-200 && lparam < Width-200+50   // Узнаю, что клик мыши был как раз в зоне расположение
                                              && dparam > Height-200 && dparam < Height-200+50) // моего объекта с учетом размера графика и размера объекта
     {                                                                                            
         Count++;
         Print(Count,"  ","Нажата кнопка");                                                     // Принтую в журнал, считаю клики
     } 

}
  • 0
  • Просмотров: 1076
  • 7 июня 2020, 08:03
  • lafler356
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Советник-усреднитель по дивергенции
Следующая запись в группе  
индикатор на двух ма
07 июня 2020
07 июня 2020

Комментарии (3)

+
0
при изменении размера окна код пересчитает координаты кнопки на следующем тике:




//+------------------------------------------------------------------+
//|                                                 CornerButton.mq4 |
//|                                              Copyright 2020, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

input int corner=0;
input int deltax=100;
input int deltay=50;

int Width  = 0;
int Height = 0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Width=(ushort)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);
   Height=(ushort)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS);

   PutButton("baton",Width-deltax,Height-deltay,"БАТОН");

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,corner);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   Width=(ushort)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);
   Height=(ushort)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS);

   PutButton("baton",Width-deltax,Height-deltay,"БАТОН");
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 7 июня 2020, 09:12
+
0
при изменении размера окна код пересчитает координаты кнопки в событии он чарт ивент:




//+------------------------------------------------------------------+
//|                                                 CornerButton.mq4 |
//|                                              Copyright 2020, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

input int corner=0;
input int deltax=100;
input int deltay=50;

int Width  = 0;
int Height = 0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Width=(ushort)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);
   Height=(ushort)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS);

   PutButton("baton",Width-deltax,Height-deltay,"БАТОН");

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,corner);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- нажатие кнопки на клавиатуре
   if(id==CHARTEVENT_CHART_CHANGE)
     {
      Width=(ushort)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);
      Height=(ushort)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS);

      PutButton("baton",Width-deltax,Height-deltay,"БАТОН");
     }
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 7 июня 2020, 09:21
+
0
Спасибо большое! супер
avatar

  9  lafler356 Автор Сообщений: 305

  • 9 июня 2020, 17:29

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари