Как-то раз я уже рассказывал, что такое 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 минут, но я решил собрать этот маленький код здесь и для себя в том числе, чтобы не рыскать заново, когда потребуется.
Классно, сколько 'консолил' не знал про это.
ОтветитьУдалитьЕсли 600 строк - то лучше перенаправить вывод в файл
ОтветитьУдалитьУдваиваю комментарий Bonart-а :)
ОтветитьУдалитьВ целом, интересно, никогда не задумывался о таких мелочах :)
Bonart, можно и в файл, согласен, но в моем случае это было бы лишним)).. по сути важна информация вначале и в конце...
ОтветитьУдалитьperfect daemon, да, согласен, мелочи, но у меня в тот момент было настроение именно заморочиться на мелочи))..
Я не говорю, что это "фу, мелочи, я до такого даже не опускался".
ОтветитьУдалитьЯ как раз именно про то, что никогда не задумывался вообще, что такое можно настраивать.
"Мелочь, а приятно" - вот подтекст моего комментария :)
А "заморочиться на мелочи" - это мне тоже знакомо))
perfect daemon, я наверно с запятыми намудрил и смысл моей фразы потерялся... я понял, что ты имеешь ввиду)).. подтекст моего сообщения был - "нужно было сделать быстро, но я все-таки не удержался, чтобы не погуглить о настройках цветов"))
ОтветитьУдалитьЕще немного о консольных приложениях можно посмотреть тут: http://delphiprog.it-fg.ru/?dir=programs
ОтветитьУдалитьДавненько писал, авось кому пригодится :)