Блог им. 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
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
570 | ★11
2 комментария
так можно ж просто сделать отправку заявок по сигналам без нажатия кнопок
про кнопку и многое другое можно найти на amisite.ru
по крайней мере года полтора 2 назад вроде видел про кнопку
avatar
Andrey, можно и по сигналам, это смотря для каких целей, я вручную сигналы выполняю, так как слишком большой объем — приходится реверс делать по частям.
На амисайте кнопка без анимации.

Читайте на SMART-LAB:
Новости российского и зарубежного рынков.
Новости российского и зарубежного рынков
Если вас интересуют другие аналитические и информационные материалы от банка АО АКБ «ЦентроКредит», смотрите их на нашем...
Фото
Страховщики становятся финансовой опорой экономики России
Страховой рынок окончательно вышел за рамки своей традиционной роли. Сегодня он не только защищает людей и бизнес от рисков, но и превращается в...
Фото
Риски в инвестициях: как избежать опасных сделок с помощью ИИ
В этой статье я продолжу рассказывать, как искусственный интеллект научился помогать в инвестициях. В предыдущей части «Записок» я...
Фото
Мозговой штурм: какие идеи в моменте?
Доброго вечера. Сегодня мы провели традиционный мозговой штурм. Выпишу некоторые идеи:

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

....все тэги



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