Скачать MetaTrader 5

Как сделать CButton нереагирующим на нажатие?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alexey Volchanskiy
17144
Alexey Volchanskiy  

Что-то я попробовал два варианта - все равно кнопка меняет цвет при нажатии

                CButton* btn = CreateButton(bname, x1, y1, x2, y2, fontColor, IntegerToString(row+1), font, FontSize1, clrBg, clrBorder);
                btn.Disable();
                btn.Deactivate();
Vladimir Karputov
Модератор
50049
Vladimir Karputov  
Alexey Volchanskiy:

Что-то я попробовал два варианта - все равно кнопка меняет цвет при нажатии

Может имеется ввиду:

btn.Locking(true);
Alexey Volchanskiy
17144
Alexey Volchanskiy  
Karputov Vladimir:

Может имеется ввиду:

Locking(true) я уже пробовал, тоже не работает. Поиском по сайту нашел пожелания к разработчикам, чтобы реализовали такую возможность, то есть ее просто нет! Я фигею. Временно решил проблему так, потом расковыряю эту станд. библиотеку.

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
    if(id == CHARTEVENT_OBJECT_CLICK)
    {
        if(StringFind(sparam, "bDigits") != -1) // "bDigits" - начало текста группы кнопок, которые не должны реагировать (менять цвет) на нажатие
            ObjectSetInteger(0, sparam, OBJPROP_STATE, 0);
        ChartRedraw();    
    }       
}
Serhiy Dotsenko
943
Serhiy Dotsenko  
по моему new нехватает после =
Alexey Volchanskiy
17144
Alexey Volchanskiy  
Serhiy Dotsenko:
по моему new нехватает после =

Это моя функция создания кнопки с установкой необходимых параметров, там конечно есть new, иначе ничего бы и не работало ))

CButton* CreateButton(string bname, int x1, int y1, int x2, int y2, color bcolor, string btext, string font, int fontSize, 
                    color colorBackground, color colorBorder, long chart = 0, int subwin = 0)
{
    CButton* btn = new CButton();
    btn.Create(chart, bname, subwin, x1, y1, x2, y2);
    btn.Color(bcolor);
    btn.Text(btext);
    btn.Font(font);
    btn.FontSize(fontSize);
    btn.ColorBackground(colorBackground);
    btn.ColorBorder(colorBorder);   
    return btn;
}
Alexey Volchanskiy
17144
Alexey Volchanskiy  

В общем, я так понял, единственный способ добиться, чтобы кнопка не реагировала на нажатие, это сделать вот так

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
    if(id == CHARTEVENT_OBJECT_CLICK)
    {
        if(StringFind(sparam, "bDigits") != -1) // "bDigits" - начало текста группы кнопок, которые не должны реагировать (менять цвет) на нажатие
            ObjectSetInteger(0, sparam, OBJPROP_STATE, 0);
        ChartRedraw();    
    }       
}
Anatoli Kazharski
58160
Anatoli Kazharski  
Alexey Volchanskiy:

В общем, я так понял, единственный способ добиться, чтобы кнопка не реагировала на нажатие, это сделать вот так

Или сделать её приоритет (OBJPROP_ZORDER) ниже, чем фон. Установив значение -1.
Artyom Trishkin
Модератор
77590
Artyom Trishkin  
Anatoli Kazharski:
Или сделать её приоритет (OBJPROP_ZORDER) ниже, чем фон. Установив значение -1.
Интересно, в МТ4 уже сделали приоритеты, или так и не реагирует на изменение?
Anatoli Kazharski
58160
Anatoli Kazharski  
Artyom Trishkin:
Интересно, в МТ4 уже сделали приоритеты, или так и не реагирует на изменение?
В MT4 тоже очень хорошо работает. 
Artyom Trishkin
Модератор
77590
Artyom Trishkin  
Anatoli Kazharski:
В MT4 тоже очень хорошо работает. 
Значит долго меня не было ...
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий