Форум программистов, компьютерный форум CyberForum.ru

Изменение цвета кнопки при многократных нажатиях - C++

Восстановить пароль Регистрация
 
dimakozyr
 Аватар для dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
04.10.2013, 15:38     Изменение цвета кнопки при многократных нажатиях #1
Есть кнопка. При нажатии на нее она становится красной, при повторном
нажатии она должна становиться зеленой, потом опять красной и т.д.

Но она почему-то один раз становится красной и все, может, кто знает, почему?

C++
1
2
3
4
5
6
7
8
9
10
11
isSoundOn = 0;
for( /* Что-то там */ ) {
     if(isSoundOn == 0) {
          // Кнопка становится красной
          isSoundOn = 1;
     }
     else {
          // Кнопка становится зеленой
          isSoundOn = 0;
     }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2013, 15:38     Изменение цвета кнопки при многократных нажатиях
Посмотрите здесь:

C++ Изменение цвета текста и фона при консольном выводе
Плавное изменение цвета треугольника C++
Изменение выведенного цвета в консоли C++
Изменение положения формы при нажатии кнопки C++
Изменение цвета текста C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
04.10.2013, 15:44     Изменение цвета кнопки при многократных нажатиях #2
Попробуй так:
C++
1
2
3
4
5
6
7
8
9
if(isSoundOn == 0) {
          // Кнопка становится красной
          isSoundOn = 1;
     }
 else    if(isSoundOn == 1) 
     {
          //кнопка становится зеленой
          isSoundOn = че-то там
      }
dimakozyr
 Аватар для dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
04.10.2013, 15:49  [ТС]     Изменение цвета кнопки при многократных нажатиях #3
Цитата Сообщение от Algoritmer Посмотреть сообщение
else * *if
Пробовал, не работает

Добавлено через 43 секунды
Цитата Сообщение от Algoritmer Посмотреть сообщение
isSoundOn = че-то там
А здесь что имеется ввиду? Условие выхода из цикла?
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
04.10.2013, 16:06     Изменение цвета кнопки при многократных нажатиях #4
покажи весь обработчик
dimakozyr
 Аватар для dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
04.10.2013, 16:11  [ТС]     Изменение цвета кнопки при многократных нажатиях #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int C_Events::buttonEvents(SDL_Event* o_event_C_Events, int numberOfButton, C_InitSurfaces *p, C_LoadImages *pli) {
    int x = o_event_C_Events -> button.x;
    int y = o_event_C_Events -> button.y;
        
    int isSoundOn = 0;
 
        if(o_event_C_Events -> type == SDL_MOUSEBUTTONDOWN)
           if(o_event_C_Events -> button.button == SDL_BUTTON_LEFT)
                if((x > o_rect_C_Events.x) && (x < o_rect_C_Events.x + o_rect_C_Events.w) &&
                   (y > o_rect_C_Events.y) && (y < o_rect_C_Events.y + o_rect_C_Events.h))
                    switch(numberOfButton) {
                    case 0: // button "play"
                        return 0;
                        break;
                    case 1: // button "sound"
                        if(isSoundOn == 0) {
                                                        // событие 1
                            o_C_Blitting_C_Events.blittingImage(200, 400, pli -> img_soundOn, p -> getScreen());
                            isSoundOn = 1;
                        }
                        else if(isSoundOn == 1){
                                                        // событие 2
                            o_C_Blitting_C_Events.blittingImage(200, 400, pli -> img_soundOff, p -> getScreen());
                            isSoundOn = 0;
                        }
                            SDL_Flip(p -> getScreen());
                        break;
 
...
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
04.10.2013, 16:41     Изменение цвета кнопки при многократных нажатиях #6
isSoundOn у тебя определяется в 5-й строке как "0". После этого я не вижу, чтоб оно переопределялось. Разумеется будет срабатывать всегда первый if

Добавлено через 1 минуту
Сделай isSoundOn глобальной и инициализируй первый раз где-нибудь за пределами этого обработчика
dimakozyr
 Аватар для dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
04.10.2013, 16:46  [ТС]     Изменение цвета кнопки при многократных нажатиях #7
Цитата Сообщение от Algoritmer Посмотреть сообщение
После этого я не вижу, чтоб оно переопределялось
Переопределяется в 19 и 24 строке

Добавлено через 3 минуты
Цитата Сообщение от Algoritmer Посмотреть сообщение
Сделай isSoundOn глобальной и инициализируй первый раз где-нибудь за пределами этого обработчика
Если сделать глобальной, то работает.
А можно как-то иначе сделать? Без глобальных, в смысле
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
04.10.2013, 16:48     Изменение цвета кнопки при многократных нажатиях #8
скажи, что она static
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2013, 16:50     Изменение цвета кнопки при многократных нажатиях
Еще ссылки по теме:

C++ Изменение цвета строки!
С++ Builder Циклы с условием (при вводе адреса цвета (например, 0 255 0) выдавать имя цвета) C++
C++ Изменение цвета шрифта

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
dimakozyr
 Аватар для dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
04.10.2013, 16:50  [ТС]     Изменение цвета кнопки при многократных нажатиях #9
Цитата Сообщение от novi4ok Посмотреть сообщение
скажи, что она static
оу е, работает, спасибо
Yandex
Объявления
04.10.2013, 16:50     Изменение цвета кнопки при многократных нажатиях
Ответ Создать тему
Опции темы

Текущее время: 23:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru