Блог им. VladT

Кнопка на графике в Amibroker

Всем добрый день.
Давно мне хотелось сделать такую кнопку на графике в Amibroker, что бы нажать и отправить заявки в квик. Но хотелось не просто жать по условному прямоугольнику, а по настоящей живой кнопке как в Windows, чтобы откликалась… Поиск в интернете не дал результатов, кроме платных, поэтому решив переломить жадных робототорговцев, я произвел на свет свой собственный код, коим с удовольствием делюсь с вами.
Комментариев по каждой строчке я не стал писать, потому что тем кому интересно программирование в Ami, разобраться не составит труда. Тем более что большинство строчек связано с рисованием на низком уровне.

Кнопка в покое:
Кнопка на графике в Amibroker
Кнопка в нажатом состоянии:
Кнопка на графике в Amibroker
Мелочь, а приятная мелочь.

Код:
 
GfxSetBkMode(1);
RequestTimedRefresh( 1 );
EnableTextOutput(False);

//Значения по умолчанию

Def_LeftX = 10; //X — левый угол кнопки
Def_LeftY = 20;  // Y- левый угол кнопки
  Def_btnWidth = 120;  //Ширина кнопки
Def_btnHeight = 24;  //Высота кнопки
Def_btnFontSize = 12;
Def_btnBuyColor = colorGreen;
Def_btnBuyTextColor = colorBlack;

//Пользовательские параметры

LeftX = Param(«Left X»,Def_LeftX,10,1000,1);
LeftY = Param(«Left Y»,Def_LeftY,20,1000,1);
btnWidth = Param(«BTN Width»,Def_btnWidth,10,300,1);
btnHeight = Param(«BTN Height»,Def_btnHeight,15,300,1);
btnFontSize = Param(«Font Size»,Def_btnFontSize,8,20,1);
btnBuyColor = ParamColor(«Buy BTN color»,Def_btnBuyColor);
btnBuyTextColor = ParamColor(«Buy BTN text color»,Def_btnBuyTextColor);

function DrawButton(X1,Y1,btnColor,btnText,btnTextColor)
{

//Определяем текущие координаты курсора
X = GetCursorXPosition(1);
Y = GetCursorYPosition(1);

//Если курсор над кнопкой и произведен клик кнопка вжимается
if( X > X1 AND X < X1+btnWidth  AND Y > Y1 AND Y < Y1+btnHeight  AND GetCursorMouseButtons() & 10 )  
{
GfxSelectPen( ColorRGB(128,128,128), 1 );
GfxMoveTo( X1+1, Y1+btnHeight -1 );
GfxLineTo( X1+1, Y1+1);
GfxLineTo( X1+btnWidth-1, Y1+1 );
GfxSelectPen( ColorRGB(212,208,200), 1 );
GfxMoveTo( X1+btnWidth-1, Y1+1  );
GfxLineTo( X1+btnWidth-1, Y1+btnHeight );
GfxLineTo( X1, Y1+btnHeight  );
GfxSelectPen( ColorRGB(255,255,255), 1 );
GfxMoveTo( X1,Y1+btnHeight  +1  );
GfxLineTo( X1+btnWidth, Y1+btnHeight +1 );
GfxLineTo( X1+btnWidth, Y1-1);
GfxSelectPen( btnColor, 0 );
GfxSelectSolidBrush( btnColor);
GfxRectangle( X1+2, Y1+2, X1+btnWidth-1, Y1+btnHeight );

 GfxSelectFont(«Arial Cyr», btnFontSize, 700);  
GfxSetTextColor(btnTextColor);  
GfxTextOut(btnText, LeftX +7, Y1+btnHeight/2 — btnFontSize/2 );  

//возвращаем значение функции = 1 для перехвата события
result = 1;  
}

//Состояние покоя кнопки
else  
{
GfxSelectPen( ColorRGB(255,255,255), 1 );
GfxMoveTo( X1, Y1+btnHeight );
GfxLineTo( X1, Y1);
GfxLineTo( X1+btnWidth, Y1 );
GfxSelectPen( ColorRGB(212,208,200), 1 );
GfxMoveTo( X1+1, Y1+btnHeight -1 );
GfxLineTo( X1+1, Y1+1);
GfxLineTo( X1+btnWidth-1, Y1+1 );
GfxSelectPen( ColorRGB(128,128,128), 1 );
GfxMoveTo( X1+btnWidth-1, Y1+1 );
GfxLineTo( X1+btnWidth-1, Y1+btnHeight );
GfxLineTo( X1, Y1+btnHeight );
GfxSelectPen( btnColor, 0 );
GfxSelectSolidBrush( btnColor);
GfxRectangle( X1+2, Y1+2, X1+btnWidth-1, Y1+btnHeight );
 GfxSelectFont(«Arial Cyr», btnFontSize, 700);  
GfxSetTextColor(btnTextColor);  
GfxTextOut(btnText, LeftX + 5, Y1+btnHeight/2-btnFontSize/2-2);  
result = 0;  
}  
return result;
}

//Вызов функции отрисовки кнопки для примера как работает
if (DrawButton(LeftX ,LeftY,btnBuyColor,«Нажми меня»,btnBuyTextColor) & 1)
{  
//здесь может быть Ваш любой код события, которое вызывается кнопкой
PopupWindow(«Работает!», «Кнопка в Ami»);
}

Вот такой результат должен быть при нажатии кнопки: появится всплывающее окно:
Кнопка на графике в Amibroker
★10
2 комментария
так можно ж просто сделать отправку заявок по сигналам без нажатия кнопок
про кнопку и многое другое можно найти на amisite.ru
по крайней мере года полтора 2 назад вроде видел про кнопку
avatar
Andrey, можно и по сигналам, это смотря для каких целей, я вручную сигналы выполняю, так как слишком большой объем — приходится реверс делать по частям.
На амисайте кнопка без анимации.

теги блога Терентьев Владимир

....все тэги



UPDONW
Новый дизайн