Как-то раз я уже рассказывал, что такое Console Application, как его создавать и как использовать. Но лично у меня не было больших нужд в консольных приложениях, правда недавно возникла необходимость написания именно такой утилиты. А именно упаковка файлов игры в один data-файл. Довольно удобно и ничего лишнего - передал несколько параметров командной строкой и вперед. Как известно, для вывода используем стандартные Write()/WriteLn().
Но одно удручает - из всего выводимого текста невозможно выделить какие-то важные моменты. Сразу приходит в голову "разукрашивание" слов и предложений, чтобы определенные элементы текста бросались в глаза.
Но одно удручает - из всего выводимого текста невозможно выделить какие-то важные моменты. Сразу приходит в голову "разукрашивание" слов и предложений, чтобы определенные элементы текста бросались в глаза.
Итак, пришлось изучить маленькие хитрости для более аккуратного вывода инфо-сообщений в консольных приложениях.
Мне было критично два момента:
- цвет выводимого текста
- сохранность всей информации на экране (за это отвечает размер буфера для текста)
В общем, приведу просто код, чтобы особо не затягивать с описательной частью.
По поводу цвета все просто, записав такое:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 OR 0);
мы укажем, чтобы у нас выводился стандартный серый текст (константа 7) на черном фоне (0).
Наверно, есть определенные константы под каждый цвет, но мне было лень искать и я оставил в числовом варианте.
После этого проблем с выделением информации нет. Приложение сразу запестрило всеми цветами радуги:
Но у меня оставалась еще одна проблема. После вывода большого объема текста (у меня в программе перечислялись упакованные файлы), скроллик окна не позволял подняться выше, чем определенное количество последних строк. Оказалось, есть ограничение в виде буфера экрана. Установить новые размеры можно, например, вот так:
const NewSize: TCoord = (x: 80; y: 600); ... SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), NewSize);
После этого у нас будет 600 строк буфера! Замечательно одним словом...
Выглядело у меня это так:
Вот такая незамысловатая информация на сегодня. В принципе, все это гуглится в течение 15-20 минут, но я решил собрать этот маленький код здесь и для себя в том числе, чтобы не рыскать заново, когда потребуется.