Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 125, средняя оценка - 4.95
Djulbars
25 / 5 / 2
Регистрация: 19.08.2011
Сообщений: 62
#1

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

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

Подскажите пожалуйста, как форматировать текст в консоли, а также как менять его цвет
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2011, 10:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Форматирование текста и изменение цвета текста в консоли (C++):

Изменение цвета текста в консоли - C++
Как изменить цвет только определённого текста в консоли? Например изменить цвет элементов матрицы, расположенных выше побочной диагонали?

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

Изменение цвета текста - C++
Привет всем. Можно ли в консоле менять цвет ЧАСТИ текста? тоесть выделить одно слово другим цветом например Просто system(color ** )...

Изменение размера текста в консоли - C++
Здравствуйте! Возможно ли изменение размера текста, выводимого в консоли?

Изменение цвета текста и фона в консольном приложении - C++
Вопросик есть какая библиотека используется для подключения цвета в с++ цвет текста определённый выводил цветной и функция включения цвета.

Изменение цвета текста и фона при консольном выводе - C++
Всем привет. Помогите решить мою проблему. Как менять цвет текста и фона при консольном выводе. Чё-то конкретного примера я не нашёл. Не...

25
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
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
Миниатюры
Форматирование текста и изменение цвета текста в консоли  
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
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 Кб, 88 просмотров)
-=ЮрА=-
Заблокирован
Автор 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
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
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 Кб, 115 просмотров)
-=ЮрА=-
12.02.2012, 18:00
  #11

Не по теме:

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

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

0
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
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
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
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
Миниатюры
Форматирование текста и изменение цвета текста в консоли  
12.02.2012, 19:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2012, 19:34
Привет! Вот еще темы с ответами:

Изменение цвета текста/фона при консольном выводе - C++
Доброго времени суток. Как изменить цвет фона/текста в консоли с++ в формате RGB? Я знаю, что есть подобная фича в windows.h, но это не...

Изменение выведенного цвета в консоли - C++
Привет всем, кто желает помочь. Такая ситуация, нужно изменить цветовые характеристики уже выведенного в консоли текста, по...

Изменение цвета строки в консоли по нажатию произвольной клавиши - C++
Не могу побороть 3 - тий пункт. Может кто поможет))) С помощью текстового редактора «Блокнот» создать файл, содержащий текст из 5-ти...

Форматирование текста - C++
всем привет. Дан текстовый файл, который содержит строки различной длины. Создайте новый файл, в котором сохраните исходный текст в...


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

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

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