Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.76/141: Рейтинг темы: голосов - 141, средняя оценка - 4.76
25 / 5 / 4
Регистрация: 19.08.2011
Сообщений: 62
1

Форматирование текста и изменение цвета текста в консоли

13.09.2011, 10:40. Показов 28925. Ответов 25
Метки нет (Все метки)

Подскажите пожалуйста, как форматировать текст в консоли, а также как менять его цвет
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.09.2011, 10:40
Ответы с готовыми решениями:

Изменение цвета текста в консоли
Как изменить цвет только определённого текста в консоли? Например изменить цвет элементов матрицы,...

Изменение цвета конкретного символа текста в консоли
Мне нужно изменить цвет определенных элементов в массиве. Ну пусть для примера нужно будет изменить...

Изменение цвета текста в консоли
Здравствуйте! Возникла небольшая проблема с оформлением, хочу что бы каждая переменная имела свой...

Изменение цвета текста, когда код цвета берется с сервера
Есть задание : Отправить на сервер название цвета, получить от сервера цвет в формате RGB и...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
25
1402 / 644 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
13.09.2011, 10:54 2
Флаги форматирования и манипуляторы
0
Заблокирован
Автор FAQ
13.09.2011, 12:35 3
Лучший ответ Сообщение было отмечено как решение

Решение

Dani,
Цитата Сообщение от Dani Посмотреть сообщение
Флаги форматирования и манипуляторы
- это не совсем то
Цитата Сообщение от Djulbars Посмотреть сообщение
менять его цвет
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
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <windows.h>//
#include <stdio.h>  //i/o
 
int main()
{
    HANDLE hSTDOut = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO SCRN_INFO;
    GetConsoleScreenBufferInfo(hSTDOut, &SCRN_INFO);
    
/*  FillConsoleOutputCharacter(hOutput, ' ',
    SCRN_INFO.dwSize.X*SCRN_INFO.dwSize.Y, POS, NULL);*/
    FillConsoleOutputAttribute(hSTDOut, 
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE /*цвет*/, 
        SCRN_INFO.dwSize.X*SCRN_INFO.dwSize.Y,SCRN_INFO.dwCursorPosition,NULL);
 
    
    //Можно управлять курсором если поменять параметры в SCRN_INFO.dwCursorPosition ;)
    SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition);
 
    char str[] = "Example whitch shows graphical compabilitest of console fonts";
    int sLen = strlen(str);
    WORD wColour = FOREGROUND_RED;
    for(int i = 0,k = 0; i < sLen; i++, k++)
    {
        if(k == 0)
            wColour = FOREGROUND_RED;
        if(k == 1)
            wColour = FOREGROUND_GREEN;
        if(k == 2)
        {
            wColour = FOREGROUND_BLUE;
            k = 0;
        }
        SetConsoleTextAttribute(hSTDOut,wColour|FOREGROUND_INTENSITY);
        printf("%c",str[i]);
    }
    SetConsoleTextAttribute(hSTDOut,
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE|FOREGROUND_INTENSITY);
    printf("\r\n");
    system("pause");
    return 0;
}
3
Миниатюры
Форматирование текста и изменение цвета текста в консоли  
Заблокирован
Автор FAQ
13.09.2011, 12:52 4
Добавлю также, что манипуляторы для С++ есть ещё флаги форматирования
\t - перевод табулятора
\r - перевод курсора вначало
\n - перевод курсора на новую строку
Возможно форматиование прямой установкой курсора SetConsoleCursorPosition
1
Заблокирован
Автор FAQ
13.09.2011, 13:09 5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Возможно форматиование прямой установкой курсора SetConsoleCursorPosition
- чтобы было понятно о возможностях установки курсора
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
int main()
{
    HANDLE hSTDOut = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO SCRN_INFO;
    GetConsoleScreenBufferInfo(hSTDOut, &SCRN_INFO);
    FillConsoleOutputAttribute(hSTDOut, 
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE /*цвет*/, 
        SCRN_INFO.dwSize.X*SCRN_INFO.dwSize.Y,SCRN_INFO.dwCursorPosition,NULL);
 
    
    //Можно управлять курсором если поменять параметры в SCRN_INFO.dwCursorPosition ;)
    SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition);
 
    int X0 = SCRN_INFO.dwCursorPosition.X;
    int Y0 = SCRN_INFO.dwCursorPosition.Y;
 
    char str[] = "Example whitch shows graphical compabilitest of console fonts";
    int sLen = strlen(str);
    WORD wColour = FOREGROUND_RED;
    for(int i = 0,k = 1; i < sLen; i++, k++)
    {
        if(k == 1)
            wColour = FOREGROUND_RED;
        if(k == 2)
            wColour = FOREGROUND_GREEN;
        if(k == 3)
        {
            wColour = FOREGROUND_BLUE;
            k = 0;
        }
        SetConsoleTextAttribute(hSTDOut,wColour|FOREGROUND_INTENSITY);
        SCRN_INFO.dwCursorPosition.Y = Y0 + 2 - k;
        SCRN_INFO.dwCursorPosition.X = X0 + i;
        SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition);
        
        printf("%c",str[i]);
        
    }
    SetConsoleTextAttribute(hSTDOut,
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE|FOREGROUND_INTENSITY);
    SCRN_INFO.dwCursorPosition.Y = Y0 + 2;
        SCRN_INFO.dwCursorPosition.X = X0 + i;
        SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition);
    printf("\r\n");
    system("pause");
    return 0;
}
2
Миниатюры
Форматирование текста и изменение цвета текста в консоли  
137 / 71 / 23
Регистрация: 17.10.2010
Сообщений: 919
12.02.2012, 14:31 6
-=ЮрА=- у меня ваш код не работает, сначала компилятор ругался на переменную i что она не определена я ее определил, теперь компиляция без ошибок, но программа не работает:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <windows.h>//
#include <stdio.h>  //i/o
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
        HANDLE hSTDOut = GetStdHandle(STD_OUTPUT_HANDLE);
        CONSOLE_SCREEN_BUFFER_INFO SCRN_INFO;
        GetConsoleScreenBufferInfo(hSTDOut, &SCRN_INFO);
        FillConsoleOutputAttribute(hSTDOut, 
                FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE /*цвет*/, 
                SCRN_INFO.dwSize.X*SCRN_INFO.dwSize.Y,SCRN_INFO.dwCursorPosition,NULL);
 
        
        //Можно управлять курсором если поменять параметры в SCRN_INFO.dwCursorPosition ;)
        SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition);
        int i;
        int X0 = SCRN_INFO.dwCursorPosition.X;
        int Y0 = SCRN_INFO.dwCursorPosition.Y;
 
        char str[] = "Example whitch shows graphical compabilitest of console fonts";
        int sLen = strlen(str);
        WORD wColour = FOREGROUND_RED;
        for(int i = 0,k = 1; i < sLen; i++, k++)
        {
                if(k == 1)
                        wColour = FOREGROUND_RED;
                if(k == 2)
                        wColour = FOREGROUND_GREEN;
                if(k == 3)
                {
                        wColour = FOREGROUND_BLUE;
                        k = 0;
                }
                SetConsoleTextAttribute(hSTDOut,wColour|FOREGROUND_INTENSITY);
                SCRN_INFO.dwCursorPosition.Y = Y0 + 2 - k;
                SCRN_INFO.dwCursorPosition.X = X0 + i;
                SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition);
                
                printf("%c",str[i]);
                
        }
        SetConsoleTextAttribute(hSTDOut,
                FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE|FOREGROUND_INTENSITY);
        SCRN_INFO.dwCursorPosition.Y = Y0 + 2;
                SCRN_INFO.dwCursorPosition.X = X0 + i;
                SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition);
        printf("\r\n");
        system("pause");
        return 0;
}
Подскажите пожалуйста в чем ошибка??????
0
Миниатюры
Форматирование текста и изменение цвета текста в консоли  
Заблокирован
Автор FAQ
12.02.2012, 14:55 7
Цитата Сообщение от isaak Посмотреть сообщение
Подскажите пожалуйста в чем ошибка??????
- возможно в неверной настройке проекта, у меня всё работает, прикладываю аттачем рабочий проект
0
Миниатюры
Форматирование текста и изменение цвета текста в консоли  
Вложения
Тип файла: rar ColorConsole_VS9_proj.rar (4.5 Кб, 96 просмотров)
Заблокирован
Автор FAQ
12.02.2012, 15:05 8
isaak, я наконец-то понял в чём дело
Цитата Сообщение от isaak Посмотреть сообщение
int i;
Цитата Сообщение от isaak Посмотреть сообщение
for(int i = 0,k = 1; i < sLen; i++, k++)
Проект разрабатывал в VS6.0 и там компилятор понимает такое объявление i и k, как если бы их объявили до цикла
for(int i = 0,k = 1; i < sLen; i++, k++)
В новых компиляторах твоё объявление дало 2 независимых одна от одной переменных i в итоге вместо того чтобы после отработки цикла for(int i = 0,k = 1; i приняло значение sLen, сюда
Цитата Сообщение от isaak Посмотреть сообщение
SCRN_INFO.dwCursorPosition.X = X0 + i;
передавалось значение
Цитата Сообщение от isaak Посмотреть сообщение
int i;
- верней неинициализированную переменную i, которая могла иметь любое значение и понятное дело большее чем 80(макс ширина символьных единиц консоли), вот и опрокидывалась здесь программа
Цитата Сообщение от isaak Посмотреть сообщение
SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition) ;
0
137 / 71 / 23
Регистрация: 17.10.2010
Сообщений: 919
12.02.2012, 15:15 9
я создаю проект Empty project -> Add New Item ->C++File(.cpp) какие еще нужно сделать настройки в проекте подскажите пожалуйста? -=ЮрА=- я загрузил ваш проект к себе компиляция прошла без ошибок, но при запуске программа также завершается с ошибкой. Не знаю че делать????
0
Заблокирован
Автор FAQ
12.02.2012, 17:52 10
isaak, действительно странно!Ниже рабочий exe, собранный по коду из 7-го поста, у меня отрабатывает без проблемм, если при его работе на твоём компьютере проявится таже ошибка, то возможно причина и не в коде, а в каком то "кривом" системном файле либо DLL.
Жду результатов теста, чесн слово пока сам в затруднении сказать что к чему
0
Миниатюры
Форматирование текста и изменение цвета текста в консоли  
Вложения
Тип файла: rar ColorConsole.exe.rar (27.6 Кб, 126 просмотров)
-=ЮрА=-
12.02.2012, 18:00
  #11

Не по теме:

PS:У меня есть подозрение, что причина может крыться в сбойном dotnetfx3.5 (Net FrameWork) DLL которой по умолчанию исользует студия.В прошлом у меня возникала похожая проблемма с DirectX, при работе одного из моих приложений "вылезал синий єкран смерти XP".
Я долго ломал голову а потом переустановил DirectX и больше проблемм не возникало, ИМХО у тебя такая же ситуация.

Как последний вариант попробуй выставить при создании более низкую версию Net FrameWork, например 2.0 - по ссылке пост который поясняет как это сделать
Ошибка при компиляции любой программы
ссылка на скрин здесь

0
137 / 71 / 23
Регистрация: 17.10.2010
Сообщений: 919
12.02.2012, 18:59 12
-=ЮрА=- спасибо за ответ, запустил ваш ColorConsole.exe, таже самая ситуация у меня ОС 7 максималка, VS 2010.

Добавлено через 31 минуту
при создании выставил низкую версию Net FrameWork 2.0, проблема осталась также, а где искать этот кривой DLL у меня стоят версии Net FrameWork 2.0, 3.5, 4.0, 4.5. Не уш то все снасить и все устанавливать заново, по реестру вычищать пока не умею, все сносить и заново Ос ставить. Подскажите пожалуйста что-нибудь еще.
0
Заблокирован
Автор FAQ
12.02.2012, 19:03 13
Цитата Сообщение от isaak Посмотреть сообщение
запустил ваш ColorConsole.exe, таже самая ситуация у меня ОС 7 максималка, VS 2010.
- тогда скорее всего нелады с DLL-ками либо конфигами в системе, тут я наверное буду бессиленМогу лишь предложить ещё попробовать запустить программу в безопасном режиме, если отработает то на 100% можно говорить о кривизне системных файлов и настроек...

Добавлено через 1 минуту
Цитата Сообщение от isaak Посмотреть сообщение
Не уш то все снасить и все устанавливать заново, по реестру вычищать пока не умею, все сносить и заново Ос ставить. Подскажите пожалуйста что-нибудь еще.
- тогда нужно локализовать баг -isaak, с отладчиком VisualStudio умеете работать???

Добавлено через 1 минуту
Нет нет ничего сносить не надо - нужно понять какая строка кода приводит к исключению
0
137 / 71 / 23
Регистрация: 17.10.2010
Сообщений: 919
12.02.2012, 19:20 14
Я запустил Отладчик он мне выдал сообщение я так ни че и не понел
0
Миниатюры
Форматирование текста и изменение цвета текста в консоли  
Заблокирован
Автор FAQ
12.02.2012, 19:34 15
Хм в самом начале, тогда предлагаю сделать так
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
HANDLE hSTDOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO SCRN_INFO;
ZeroMemory(&SCRN_INFO, sizeof(SCRN_INFO));
GetConsoleScreenBufferInfo(hSTDOut, &SCRN_INFO);
Добавлено через 3 минуты
Правда странно
isaak, а можешь выложить свой проект с настройками???Удали только ProgramIntallagence DataBase и папки Debug и Release и пришли архив, думаю данная ошибка обуслвленна не совсем подходящми настройками проекта....
0
Миниатюры
Форматирование текста и изменение цвета текста в консоли  
137 / 71 / 23
Регистрация: 17.10.2010
Сообщений: 919
12.02.2012, 20:44 16
-=ЮрА=- вот мой проект я ни че ни удалял, штоб еще хуже не сделать, посмотрите пожалуйста если будет время. за ранее огромное спасибо.
0
Вложения
Тип файла: zip ColorConsole.zip (488.4 Кб, 18 просмотров)
-=ЮрА=-
12.02.2012, 22:55
  #17

Не по теме:

Цитата Сообщение от isaak Посмотреть сообщение
-=ЮрА=- вот мой проект я ни че ни удалял, штоб еще хуже не сделать, посмотрите пожалуйста если будет время. за ранее огромное спасибо.
-
isaak, что то не в порядке с архивом(см скрин), да и маловат он для полного проекта:pardon:

0
137 / 71 / 23
Регистрация: 17.10.2010
Сообщений: 919
13.02.2012, 20:33 18
-=ЮрА=- вчера время не было, сегодня выложил архив, если будет время посмотрите пожалуйста. Заранее огромное спасибо.
0
Вложения
Тип файла: rar ColorConsole.rar (8.15 Мб, 19 просмотров)
Заблокирован
Автор FAQ
13.02.2012, 22:49 19
Цитата Сообщение от isaak Посмотреть сообщение
-=ЮрА=- вчера время не было, сегодня выложил архив, если будет время посмотрите пожалуйста. Заранее огромное спасибо.
- я забыл сообщить что у меня лишь 2008-ая студия, 10-ки нет, поэтому могу лишь догадываться
Первое что бросается в глаза так это вот что

Цитата Сообщение от isaak Посмотреть сообщение
#include <windows.h>//
#include <stdio.h> //i/o
#include <iostream>
#include <iomanip>
using namespace std;
- т.е пишешь новый стиль заголовков параллельно используя старый, всё ничего но ещё и std используем вместе с С-шным потоком вывода, а ведь вывод на экран у нас такой
Цитата Сообщение от isaak Посмотреть сообщение
SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition) ;
printf("%c",str[i]);
}
- возможно смсь С/С++ и приводит к ошибке

Сразу скажу что на 9-ке отработал и С/с++ смесь стилей хдеров, причём без предупреждений или неожиданных исклюючений. Прикрепляю рабочий проект в 9-ке 1 к 1-му по коду из архива. Если будет выскакивать ошибка то сперва уберём из хедером то что окрашено красным, (т.е пишем их как изначально было у меня по коду
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
#include <windows.h>//
#include <stdio.h> *//i/o
int main()
{
,а там посмотрим будет ли вновь появляться ошибка или же в этом и было всё дело...
Жду результатов теста!
1
Вложения
Тип файла: rar ColorConsole_VS9_proj.rar (4.1 Кб, 28 просмотров)
137 / 71 / 23
Регистрация: 17.10.2010
Сообщений: 919
14.02.2012, 21:40 20
Доброго время суток -=ЮрА=-, спасибо за ответ запускал ваши проект двумя способами как вы советуете, но к сожалению проблема осталась.
0
Миниатюры
Форматирование текста и изменение цвета текста в консоли   Форматирование текста и изменение цвета текста в консоли  
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.02.2012, 21:40

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Задание цвета текста в консоли на C
Как задать цвет в с ?

ContextMenu изменение цвета выбора и цвета текста
Добрый день подскажите как сделать так что бы после выбора пункта меню цвет текста менялся обратно...

Изменение цвета текста
Здравствуйте. Глупая задача, но только начинаю разбираться с java И прохожу простые задачи, очень...

Изменение цвета текста
Здравствуйте! Подскажите, пожалуйста, как можно изменить цвет текста в memo, лишь определенного...

Изменение цвета текста
Всем привет! Я написал блокнот в VB, в котором можно менять цвет текста. Меняется цвет всего...

Изменение цвета текста
Привет всем. Можно ли в консоле менять цвет ЧАСТИ текста? тоесть выделить одно слово другим цветом...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.