Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
khorosh
10109
khorosh  
Обрамления с условиями обработки события не нужно, а вот только непосредственно та часть с операторами ,  которые меняют состояние кнопки . Т.е.  нужно, чтобы каждое нажатие кнопки меняло её состояние на противоположное.  Было false, стало true и наоборот. Кто сможет предложить самый экономный вариант? У меня есть вариант, который я считаю самым экономичным, но мне интересно посмотреть, как это делают другие. Если подобный вариант здесь не будет предложен, то я его потом выложу.
Dmitry Fedoseev
47055
Dmitry Fedoseev  
x=!x;
khorosh
10109
khorosh  
Dmitry Fedoseev:
А где здесь операторы смены состояния кнопки? Ну и используемые переменные должны быть определены.
Dmitry Fedoseev
47055
Dmitry Fedoseev  
О какой кнопке вопрос? Если OBJ_BUTTON, то она сама меняет состояние при клике. Должно быть отключено свойств SELECTABLE.
khorosh
10109
khorosh  
Dmitry Fedoseev:
О какой кнопке вопрос? Если OBJ_BUTTON, то она сама меняет состояние при клике. Должно быть отключено свойств SELECTABLE.
Ну хорошо, тогда какой самый экономичный код смены цвета кнопки при её нажатии.
Ihor Herasko
16457
Ihor Herasko  
khorosh:
Ну хорошо, тогда какой самый экономичный код смены цвета кнопки при её нажатии.

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

btnColor = (btnColor == clrBlue)? clrRed : clrBlue;
khorosh
10109
khorosh  
Ihor Herasko:

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

А где оператор смены цвета? Меня интересует смена цвета фона кнопки.
Alexey Volchanskiy
24809
Alexey Volchanskiy  
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
10109
khorosh  
Alexey Volchanskiy:

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

А меня матрицы кнопок и классы не интересуют, циклы, поиски объектов и прочее тоже. Меня интересует главным образом изменение цвета одной единственной кнопки в связи со сменой  её состояния. Вот у Ihor Herasko и  Dmitry Fedoseev ход мысли правильный, но только уж слишком кратко, не использовали функции для работы с кнопкой, дали информацию на уровне идеи. Хотя я и понимаю, что краткость - сестра таланта. А вам Alexey спасибо за участие.
Maxim Kuznetsov
13472
Maxim Kuznetsov  
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
10109
khorosh  
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
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий