Подсмотрел я как сделан интерфейс в одном индикаторе (инфопанель Ильнура для сетки) и стало мне понятно как для советников можно просто создавать интерфейс и самое главное, его потом можно перемещать мышкой по экрану. Те, что я велосипедил до этого, были абсолютно статичны и более объемны по коду. Но возникла проблема обработки нажатия на кнопки. После 20-го, 30-го... 50-го нажатия одна из кнопок как-бы залипает и срабатывает 2-5-6 раз. И если это была команда на закрытие сетки ордеров - все бы ничего, а вот если это кнопка открытия нового ордера!!?? Робот лупанет 5-6 ордеров в одной точке. :(
Пробовал на терминалах разных билдов.
Сейчас код вот такой:
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
iPanel.OnEvent(id, lparam, dparam, sparam);
if (iPanel.xBuy_Button.Pressed()) Print("Нажата xBuy !!!");
if (iPanel.Buy_Button.Pressed()) Print("Нажата Buy 0.32 !!!");
if (iPanel.xSell_Button.Pressed()) Print("Нажата xSell !!!");
if (iPanel.Sell_Button.Pressed()) {Print("Нажата Sell 0.18 !!!"); };
ChartRedraw();
}
Раньше делал как-то так и дабл-трипл клик не было (но инфоокно - статично)
if(id==CHARTEVENT_OBJECT_CLICK) {
if(sparam == btnCloseAllBuy.name) {CloseOrders(OP_BUY); ObjectSetInteger(0,btnCloseAllBuy.name,OBJPROP_STATE,0); lastBuyTP =0; GlobalVariableSet(Symbol()+"lastBuyTP",lastBuyTP);}
if(sparam == btnCloseAllSell.name){CloseOrders(OP_SELL);ObjectSetInteger(0,btnCloseAllSell.name,OBJPROP_STATE,0);lastSellTP =0; GlobalVariableSet(Symbol()+"lastSellTP",lastSellTP);}
}
В приложении исходник индикатора с моей панелью. Там под комментариями в функции OnChartEvent видны мои эксперименты.
Буду рад любым идеям и особенно примерам интерфесов с исходниками.
P.S. И желательно для "домохозяек"!








