#property strict
//--- описание
#property description "Скрипт создает кнопку на графике."
//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//--- входные параметры скрипта
input string InpName="Button"; // Имя кнопки
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Угол графика для привязки
input string InpFont="Arial"; // Шрифт
input int InpFontSize=14; // Размер шрифта
input color InpColor=clrBlack; // Цвет текста
input color InpBackColor=C'236,233,216'; // Цвет фона
input color InpBorderColor=clrNONE; // Цвет границы
input bool InpState=false; // Нажата/Отжата
input bool InpBack=false; // Объект на заднем плане
input bool InpSelection=false; // Выделить для перемещений
input bool InpHidden=true; // Скрыт в списке объектов
input long InpZOrder=0; // Приоритет на нажатие мышью
//+------------------------------------------------------------------+
//| Создает кнопку |
//+------------------------------------------------------------------+
bool ButtonCreate(const long chart_ID=0, // ID графика
const string name="Button", // имя кнопки
const int sub_window=0, // номер подокна
const int x=0, // координата по оси X
const int y=0, // координата по оси Y
const int width=50, // ширина кнопки
const int height=18, // высота кнопки
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // угол графика для привязки
const string text="Button", // текст
const string font="Arial", // шрифт
const int font_size=10, // размер шрифта
const color clr=clrBlack, // цвет текста
const color back_clr=C'236,233,216', // цвет фона
const color border_clr=clrNONE, // цвет границы
const bool state=false, // нажата/отжата
const bool back=false, // на заднем плане
const bool selection=false, // выделить для перемещений
const bool hidden=true, // скрыт в списке объектов
const long z_order=0) // приоритет на нажатие мышью
{
//--- сбросим значение ошибки
ResetLastError();
//--- создадим кнопку
if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0))
{
Print(__FUNCTION__,
": не удалось создать кнопку! Код ошибки = ",GetLastError());
return(false);
}
//--- установим координаты кнопки
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- установим текст
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- установим размер шрифта
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- установим цвет текста
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим цвет фона
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- установим цвет границы
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- переведем кнопку в заданное состояние
ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
//--- включим (true) или отключим (false) режим перемещения кнопки мышью
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Перемещает кнопку |
//+------------------------------------------------------------------+
bool ButtonMove(const long chart_ID=0, // ID графика
const string name="Button", // имя кнопки
const int x=0, // координата по оси X
const int y=0) // координата по оси Y
{
//--- сбросим значение ошибки
ResetLastError();
//--- переместим кнопку
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,
": не удалось переместить X-координату кнопки! Код ошибки = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
{
Print(__FUNCTION__,
": не удалось переместить Y-координату кнопки! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Изменяет размер кнопки |
//+------------------------------------------------------------------+
bool ButtonChangeSize(const long chart_ID=0, // ID графика
const string name="Button", // имя кнопки
const int width=50, // ширина кнопки
const int height=18) // высота кнопки
{
//--- сбросим значение ошибки
ResetLastError();
//--- изменим размеры кнопки
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,
": не удалось изменить ширину кнопки! Код ошибки = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{
Print(__FUNCTION__,
": не удалось изменить высоту кнопки! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Изменяет угол графика для привязки кнопки |
//+------------------------------------------------------------------+
bool ButtonChangeCorner(const long chart_ID=0, // ID графика
const string name="Button", // имя кнопки
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER) // угол графика для привязки
{
//--- сбросим значение ошибки
ResetLastError();
//--- изменим угол привязки
if(!ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner))
{
Print(__FUNCTION__,
": не удалось изменить угол привязки! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Изменяет текст кнопки |
//+------------------------------------------------------------------+
bool ButtonTextChange(const long chart_ID=0, // ID графика
const string name="Button", // имя кнопки
const string text="Text") // текст
{
//--- сбросим значение ошибки
ResetLastError();
//--- изменим текст объекта
if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
{
Print(__FUNCTION__,
": не удалось изменить текст! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Удаляет кнопку |
//+------------------------------------------------------------------+
bool ButtonDelete(const long chart_ID=0, // ID графика
const string name="Button") // имя кнопки
{
//--- сбросим значение ошибки
ResetLastError();
//--- удалим кнопку
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": не удалось удалить кнопку! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- размеры окна графика
long x_distance;
long y_distance;
//--- определим размеры окна
if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
{
Print("Не удалось получить ширину графика! Код ошибки = ",GetLastError());
return;
}
if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
{
Print("Не удалось получить высоту графика! Код ошибки = ",GetLastError());
return;
}
//--- определим шаг для изменения размеров кнопки
int x_step=(int)x_distance/32;
int y_step=(int)y_distance/32;
//--- установим координаты кнопки и ее размер
int x=(int)x_distance/32;
int y=(int)y_distance/32;
int x_size=(int)x_distance*15/16;
int y_size=(int)y_distance*15/16;
//--- создадим кнопку
if(!ButtonCreate(0,InpName,0,x,y,x_size,y_size,InpCorner,"Press",InpFont,InpFontSize,
InpColor,InpBackColor,InpBorderColor,InpState,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- перерисуем график
ChartRedraw();
//--- в цикле уменьшаем кнопку
int i=0;
while(i<13)
{
//--- задержка в полсекунды
Sleep(500);
//--- переведем кнопку в нажатое состояние
ObjectSetInteger(0,InpName,OBJPROP_STATE,true);
//--- перерисуем график и подождем 0.2 секунды
ChartRedraw();
Sleep(200);
//--- переопределим координаты и размер кнопки
x+=x_step;
y+=y_step;
x_size-=x_step*2;
y_size-=y_step*2;
//--- уменьшим кнопку
ButtonMove(0,InpName,x,y);
ButtonChangeSize(0,InpName,x_size,y_size);
//--- вернем кнопку в ненажатое состояние
ObjectSetInteger(0,InpName,OBJPROP_STATE,false);
//--- перерисуем график
ChartRedraw();
//--- проверим факт принудительного завершения скрипта
if(IsStopped())
return;
//--- увеличим счетчик цикла
i++;
}
//--- задержка в полсекунды
Sleep(500);
//--- удалим кнопку
ButtonDelete(0,InpName);
ChartRedraw();
//--- подождем 1 секунду
Sleep(1000);
//---
} |