Скачать MetaTrader 5

Самый экономичный код смены состояния кнопки.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
khorosh
8247
khorosh 2016.03.10 20:49 
Обрамления с условиями обработки события не нужно, а вот только непосредственно та часть с операторами ,  которые меняют состояние кнопки . Т.е.  нужно, чтобы каждое нажатие кнопки меняло её состояние на противоположное.  Было false, стало true и наоборот. Кто сможет предложить самый экономный вариант? У меня есть вариант, который я считаю самым экономичным, но мне интересно посмотреть, как это делают другие. Если подобный вариант здесь не будет предложен, то я его потом выложу.
Dmitry Fedoseev
43473
Dmitry Fedoseev 2016.03.10 20:56  
x=!x;
khorosh
8247
khorosh 2016.03.10 20:59  
Dmitry Fedoseev:
А где здесь операторы смены состояния кнопки? Ну и используемые переменные должны быть определены.
Dmitry Fedoseev
43473
Dmitry Fedoseev 2016.03.10 21:13  
О какой кнопке вопрос? Если OBJ_BUTTON, то она сама меняет состояние при клике. Должно быть отключено свойств SELECTABLE.
khorosh
8247
khorosh 2016.03.10 21:16  
Dmitry Fedoseev:
О какой кнопке вопрос? Если OBJ_BUTTON, то она сама меняет состояние при клике. Должно быть отключено свойств SELECTABLE.
Ну хорошо, тогда какой самый экономичный код смены цвета кнопки при её нажатии.
Ihor Herasko
9264
Ihor Herasko 2016.03.10 22:23  
khorosh:
Ну хорошо, тогда какой самый экономичный код смены цвета кнопки при её нажатии.

Тогда чуть сложнее:

btnColor = (btnColor == clrBlue)? clrRed : clrBlue;
khorosh
8247
khorosh 2016.03.10 22:28  
Ihor Herasko:

Тогда чуть сложнее:

А где оператор смены цвета? Меня интересует смена цвета фона кнопки.
Alexey Volchanskiy
17136
Alexey Volchanskiy 2016.03.11 07:10  
khorosh:
А где оператор смены цвета? Меня интересует смена цвета фона кнопки.

Меня экономичность вообще не интересует. А зачем она, поясните? Я делаю так, это для матрицы кнопок 2*2, это вырезка из класса, но я думаю, будет ясно

string  BtnName[BTN_ROWS][BTN_COLS]     = {{"btnSellEnable", "btnBuyEnable"}, {"btnCloseLoss", "btnCloseProfit"}};
string  BtnText[BTN_ROWS][BTN_COLS]     = {{"Sell enable", "Buy enable"}, {"Close loss", "Close profit"}};
int     XYCoord[BTN_ROWS][BTN_COLS][4]  = {{{20,50,100,75}, {110,50,190,75}}, {{20,85,100,110}, {110,85,190,110}}};
color   BtnColor[BTN_ROWS][BTN_COLS][2] = {{{clrLime,clrRed}, {clrLime,clrRed}}, {{clrLime,clrRed}, {clrLime,clrRed}}};
color   BtnTextColor[BTN_ROWS][BTN_COLS][2] = {{{clrBlack,clrLinen}, {clrBlack,clrLinen}}, {{clrBlack,clrLinen}, {clrBlack,clrLinen}}};

    CButton*    ArrButtons[BTN_ROWS][BTN_COLS];

    void SetPressedState(int row, int col, bool state)
    {
        ArrButtons[row][col].Pressed(state);
    }

    void SetPressedState(string name, bool state)
    {
        for(int row = 0; row < BTN_ROWS; row++)
            for(int col = 0; col < BTN_COLS; col++)
            {
                if(StringFind(name, BtnName[row][col]) != -1)
                {
                    ArrButtons[row][col].Pressed(state);
                    if(state)
                    {
                        ArrButtons[row][col].ColorBackground(BtnColor[row][col][1]);
                        ArrButtons[row][col].Color(BtnTextColor[row][col][1]);
                    }    
                    else 
                    {   
                        ArrButtons[row][col].ColorBackground(BtnColor[row][col][0]);
                        ArrButtons[row][col].Color(BtnTextColor[row][col][0]);
                    }    
                    return; // кнопка нашлась
                }    
            }
    }
khorosh
8247
khorosh 2016.03.11 10:57  
Alexey Volchanskiy:

Меня экономичность вообще не интересует. А зачем она, поясните? Я делаю так, это для матрицы кнопок 2*2, это вырезка из класса, но я думаю, будет ясно

А меня матрицы кнопок и классы не интересуют, циклы, поиски объектов и прочее тоже. Меня интересует главным образом изменение цвета одной единственной кнопки в связи со сменой  её состояния. Вот у Ihor Herasko и  Dmitry Fedoseev ход мысли правильный, но только уж слишком кратко, не использовали функции для работы с кнопкой, дали информацию на уровне идеи. Хотя я и понимаю, что краткость - сестра таланта. А вам Alexey спасибо за участие.
Maxim Kuznetsov
10133
Maxim Kuznetsov 2016.03.11 11:19  
khorosh:
Обрамления с условиями обработки события не нужно, а вот только непосредственно та часть с операторами ,  которые меняют состояние кнопки . Т.е.  нужно, чтобы каждое нажатие кнопки меняло её состояние на противоположное.  Было false, стало true и наоборот. Кто сможет предложить самый экономный вариант? У меня есть вариант, который я считаю самым экономичным, но мне интересно посмотреть, как это делают другие. Если подобный вариант здесь не будет предложен, то я его потом выложу.

сразу масса вопросов - что считать "состоянием" ? нажата/отжата ?? разрешена/запрещена ?? И что экономим...можно экономить объём кода, скорость, обращения к библ.функциям.

в простейшем варианте, что-то навроде:

// меняем состояние нажата/отжата

if (ObjectSetInteger(0,buttonName,OBJPROP_STATE,state=(ObjectGetInteger(0,buttonName,OBJPROP_STATE)==0)) ) {

  // меняем прочие декорации (фон,шрифт и прочее-прочее)

  switch (state) {

  case 1: // декорации для НАЖАТОЙ кнопки

  break;

  case 0: // декорации для ОТЖАТОЙ кнопки

  break;

  }

}

khorosh
8247
khorosh 2016.03.11 11:47  
Maxim Kuznetsov:

сразу масса вопросов - что считать "состоянием" ? нажата/отжата ?? разрешена/запрещена ?? И что экономим...можно экономить объём кода, скорость, обращения к библ.функциям.

в простейшем варианте, что-то навроде:

// меняем состояние нажата/отжата

if (ObjectSetInteger(0,buttonName,OBJPROP_STATE,state=(ObjectGetInteger(0,buttonName,OBJPROP_STATE)==0)) ) {

  // меняем прочие декорации (фон,шрифт и прочее-прочее)

  switch (state) {

  case 1: // декорации для НАЖАТОЙ кнопки

  break;

  case 0: // декорации для ОТЖАТОЙ кнопки

  break;

  }

}

Имел ввиду минимальный объём кода, количество символов в коде(букв. цифр). Состояние true - нажата, false - отжата. В коде должны быть только функции связанные с изменением состояния и цвета фона кнопки..
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий