Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Скажите, как почистить экран в консольном приложении?

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Ineluki

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Собственно, как это сделать, и можно ли это сделать вообще?

Всего записей: 9 | Зарегистр. 22-03-2003 | Отправлено: 01:46 10-06-2003
vbond



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Заполняешь весь экран пробелом одного цвета и все.

Всего записей: 151 | Зарегистр. 24-09-2001 | Отправлено: 08:38 10-06-2003
v0yager



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ineluki
 
кроме варианта vbond"а (вывод пробелов), это можно сделать с помощью серии вызовов Console.WriteLine (вызовов будет явно меньше).  
 
При этом не стоит забывать, что разрешение экрана в консоли под Win32 не всегда 80х25 (2000 знаков, в старом ДОСе наиболее распостраненный режим). Так что при очистке выводом пробелов их нужно явно больше 2000 (для гарантии). Либо вывести 100 WriteLine - должно хватить с запасом.

Всего записей: 95 | Зарегистр. 08-05-2003 | Отправлено: 10:37 10-06-2003 | Исправлено: v0yager, 10:38 10-06-2003
vbond



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
(вызовов будет явно меньше).  

 1. Для coordDest указать 0
 2. Для colors указать 0
 3. FillConsoleOutputAttribute(hOutPut, colors, 25*80, coordDest, cWritten);
 4. FillConsoleOutputCharacter(hOutPut, $20, 25*80, coordDest, cWritten);
И где тут много вызовов? Что касается разрешения экрана, то его всегда можно узнать перед очисткой.
 
Добавлено
В принципе можно обойтись и без 4 пункта, если все будет с аттрибутом 0, то и ничего видно не будет.

Всего записей: 151 | Зарегистр. 24-09-2001 | Отправлено: 15:56 10-06-2003
v0yager



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vbond
Комментарий о количестве вызовов (при использовании Win32 API) снимается. При этом остается одна неясность:
в топике была ссылка на консольное приложение MSVS.NET без указания языка и managed/unmanaged(VC++.NET). Если нужен ТОЛЬКО managed code, то что делать с вызовами WIN 32 API:  FillConsoleOutputAttribute, FillConsoleOutputCharacter?
 
Комментарий с разрешением экрана остается в силе:  

Цитата:
3. FillConsoleOutputAttribute(hOutPut, colors, 25*80, coordDest, cWritten);  
4. FillConsoleOutputCharacter(hOutPut, $20, 25*80, coordDest, cWritten);  

Например, у меня и у большинства моих знакомых такая конструкция не очистит полностью консоль, так как установлено разрешение 30х90.  
 
Поэтому и предложил для managed кода очистку консоли через серию WriteLine. Хотя могут быть и другие варианты.

Всего записей: 95 | Зарегистр. 08-05-2003 | Отправлено: 17:16 10-06-2003
vbond



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Поэтому и предложил для managed кода очистку консоли через серию WriteLine. Хотя могут быть и другие варианты.

С этим никто не спорит.

Цитата:
Например, у меня и у большинства моих знакомых такая конструкция не очистит полностью консоль, так как установлено разрешение 30х90.  
 

Например, я стараюсь определиться с разрешением экрана еще при инициализации консоли, т.ч. эти цифры мне известны заранее.

Цитата:
MSVS.NET без указания языка и managed/unmanaged(VC++.NET).

Верно замечено, что небыло указания на язык и пр.

Всего записей: 151 | Зарегистр. 24-09-2001 | Отправлено: 08:44 11-06-2003
Ineluki

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как это не было? С++ .NET
 
В любом случае, всем спасибо.

Всего записей: 9 | Зарегистр. 22-03-2003 | Отправлено: 21:10 11-06-2003
Tishka



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Выполнив в консоли команду CLS - очистка экрана.

Всего записей: 113 | Зарегистр. 22-11-2002 | Отправлено: 12:43 12-06-2003
Ineluki

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я хочу почистить экран в своей программе, задуманной как консольное приложение, а не в консоле.

Всего записей: 9 | Зарегистр. 22-03-2003 | Отправлено: 22:38 13-06-2003
DLans

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Например кусок програмы:
 

Код:
 
cout<<"Hello_1\n";
cout<<"Hello_2\n";
cout<<"Hello_3\n";
 

 
На экране выводится:

Код:
 
Hello_1
Hello_2
Hello_3
 

 
Я знаю, что экран можно очистить командой system("cls");
А можно ли очистить какую-нибудь определенную строчку (вторую например) в консоли, например чтобы осталось только:

Код:
 
Hello_1
 
Hello_3
 

 
Так же хочу узнать, можно ли очистить несколько символов в строке (например 3-5 символы), чтобы было так:

Код:
 
Hello_1
He   _2
Hello_3
 

 
Это нужно для динамического обновления данных, например:
SPEED: xxx
 
 
Работаю в обычном C++ (не .NET).
Как это осуществить?

Всего записей: 197 | Зарегистр. 05-01-2006 | Отправлено: 13:45 03-07-2006
dyr farot

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SetConsoleCursorPosition

Всего записей: 697 | Зарегистр. 03-08-2004 | Отправлено: 15:43 03-07-2006
DLans

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А подробнее?

Всего записей: 197 | Зарегистр. 05-01-2006 | Отправлено: 02:04 11-07-2006
Mickey_from_nsk

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DLans
Если хочешь заморочек более сложных чем просто вывод на экран и использование управляющих кодов типа \n, \t, \r и т.д., можешь почитать про работу с буфером экрана. Фактически эта работа напоминает работу в DOS с видеопамятью. Только немного интереснее.

Всего записей: 636 | Зарегистр. 21-10-2002 | Отправлено: 11:15 11-07-2006
nick7inc



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
#include <conio.h> // или #include <conio2.h> если в MinGW, но  
// надо ставить дополнительную библиотеку - Conio2
/**
 * Clears whole screen.
 */
void clrscr (void);

Пользуюсь в MinGW.

----------
Джин, не лезь в бутылку.

Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 22:07 13-11-2009 | Исправлено: nick7inc, 22:08 13-11-2009
asi81



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Наверное самый простой способ чистить некоторые символы на экране - в случае если ты знаешь, что на экране уже есть и какие ты символы хочешь убрать,  
как пример  
printf("Hello World");
 
//если курсор досих пор на этой строке,  то достаточно сделать
printf("\r");
//и после этого полностью переписать строку
printf("H ll  W rld");
//В данном случае мы чистим все гласные
//Если курсор опустился вниз, тоесть было выполнено printf("\n"), то придется работать с функциями курсора

Всего записей: 86 | Зарегистр. 08-06-2009 | Отправлено: 18:49 17-11-2009
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Скажите, как почистить экран в консольном приложении?


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru