Делаем кнопку на графике.
Часть 2.
Продолжаем изучать рисоваие кнопки на графике.
Сделанная в прошлый раз кнопка срабатывала только один раз при нажатии.
А что делать если надо чтобы наша кнопак включалась и выключалась?
Все очень просто. Надо запомнить ее состояние.
Для этого в Ами есть статические переменные.
Статическая переменная это переменная которая доступна из любого кода AFL и соответственно может служить для передачи данных между различными формулами.
В общем для начала надо инициализировать переменную которая будет "помнить" состояние нашей кнопки.
key = StaticVarGet("key");
затем в блоке, где мы обнаруживаем щелчек по кнопке изменяем значение нашей переменной на противоположное.
if(MouseOnBut AND ClikBut)
{
if(key == 1)
StaticVarSet("key", 0);
else
StaticVarSet("key", 1);
}
Дальше проверяем в каком состоянии сейчас наша кнопка (Вкл. или Выкл.).
Если включена, то выполняем необходимые действия.
Я изменю цвет кнопки на красный и нарисую скользящую среднюю.
if(key == 1)
{
color = colorRed;
Plot(MA(C, 10), "MA_10", ColorRed);
}
В итоге весь код выглядит так.
MouseOnBut =
GetCursorXPosition( 1 ) > 5 AND
GetCursorXPosition( 1 ) < 100 AND
GetCursorYPosition( 1 ) > 20 AND
GetCursorYPosition( 1 ) < 50;
ClikBut = GetCursorMouseButtons() == 9;
key = StaticVarGet("key");
color = colorBlue;
if(MouseOnBut AND ClikBut)
{
if(key == 1)
StaticVarSet("key", 0);
else
StaticVarSet("key", 1);
}
if(key == 1)
{
color = colorRed;
Plot(MA(C, 10), "MA_10", ColorRed);
}
Plot(C, "", colorBlack, styleCandle);
GfxSelectSolidBrush( color );
GfxRectangle( 5, 20, 100, 50 );
GfxSelectFont("Tahoma", 15, 700 );
GfxSetBkColor(color);
GfxSetTextColor(colorWhite);
GfxTextOut( "Кнопка", 15, 23 );
Но это еще не все. Если данный код попробовать на графике который не подключен к данным, то сразу бросается в глаза, что график
или совсем не реагирует на наши нажатия на кнопку, или реагирует с большой задержкой. Пока его не "пошевелишь".
Это происходит потому, что Ами если не видит изменений в данных на экране не будет перерисовывать график и пересчитывать AFL код.
К счастью, мы можем заставить Ами принудительно перерисовывать график. Для этого можно воспользоваться функцией
RequestTimedRefresh( 1 );
Тут 1 - это время в секундах через которое необходимо перерисовать график.
Эту функцию можно добавить или в начало или в конец кода.
Удачи.