Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.20;
Скачать: CL | DM;

Вниз

Консольное приложение. Очистить Экран.   Найти похожие ветки 

 
jonni ©   (2005-01-06 22:15) [0]

Есть ли функции для очистки экрана консоли??? В MSDN не нашёл ничего кроме как ScrollConsoleScreenBuffer с помощью которой можно затирать.

Может кто знает. Есть ли что-нибудь ещё для этих целей?


 
GuAV ©   (2005-01-06 22:47) [1]

в 98 вроде работает...

program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils, Windows;

procedure ExecuteDOSCommand(cmd: string);
var
  SI: TStartupInfo;
  PI: TProcessInformation;
begin
  FillChar(SI, SizeOf(SI),0);
  SI.cb:=SizeOf(SI);
  if not CreateProcess(nil,
    PChar(SysUtils.GetEnvironmentVariable("COMSPEC") + " /C" + cmd),
    nil, nil, False, 0, nil, nil, SI, PI) then
    RaiseLastOSError;
  WaitForSingleObject(PI.hProcess, INFINITE);
  CloseHandle(PI.hThread);
  CloseHandle(PI.hProcess);
end;

begin
 WriteLn("Now you see it");
 ReadLn;
 ExecuteDOSCommand("CLS");
 WriteLn("Now you don""t...");
 ReadLn;
end.


 
jack128 ©   (2005-01-06 22:57) [2]

GuAV ©   (06.01.05 22:47) [1]
GetEnvironmentVariable("COMSPEC") + " /C" + cmd

а что такое cmd ?? "cmd" ??


 
jack128 ©   (2005-01-06 23:01) [3]

вобщем в Win2K не работает..


 
jack128 ©   (2005-01-06 23:02) [4]

блин, сорри - туплю -)


 
GuAV ©   (2005-01-06 23:13) [5]

jack128 ©   (06.01.05 23:01) [3]
jack128 ©   (06.01.05 23:02) [4]

Так работает или нет ?

Кстати, если работает, наверное лучше действительно прописать "CLS" заместо cmd, т.к. другие дос - комманды вряд ли будут нужны.


 
Cobalt ©   (2005-01-06 23:47) [6]

Грустно :(
Вот так программисты и приходят к тому, что бы использовать сторонние программы с парсером получаемого текста, вместо того, что бы использовать библиотеки...


 
GuAV ©   (2005-01-07 00:12) [7]

Cobalt ©   (06.01.05 23:47) [6]

не понял.


 
vertal ©   (2005-01-07 01:01) [8]

Я не совсем понимаю, зачем для этого вызывать внешние программы, как предложено в [1]. Вот на мой взгляд более подходящий код:

{$APPTYPE CONSOLE}

uses windows;

function ClearScreenBuffer(): Boolean;
var
 Screen: PCharInfo;
 upperleftcorner: _coord;
 RegionToWrite: TSmallRect;
 csbi: _Console_Screen_Buffer_Info;
begin
 Result := False;
 GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), csbi);
 Screen := PCharInfo(GlobalAlloc(GPTR, sizeof(TCHarInfo) * csbi.dwSize.X * csbi.dwSize.Y));
 if Screen = nil then Exit;
 upperleftcorner.X := 0;
 upperleftcorner.Y := 0;
 RegionToWrite.Left := 0;
 RegionToWrite.Top := 0;
 RegionToWrite.Right := csbi.dwSize.X - 1;
 RegionToWrite.Bottom := csbi.dwSize.Y - 1;
 Result := WriteConsoleOutput(GetStdHandle(STD_OUTPUT_HANDLE), screen, csbi.dwSize,
   upperleftcorner, RegionToWrite);
 GlobalFree(Cardinal(Screen));
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),upperleftcorner);
end;

begin
 ClearScreenBuffer();
end.

Проверял в Win2000. Единственное - более правильно конечно заполнять не символом Char(0), а пробелами, но на моей системе и такеи символы отображаются как пробелы, так что не стал ставить цикл.


 
jack128 ©   (2005-01-07 01:43) [9]

GuAV ©   (06.01.05 23:13) [5]
Так работает или нет ?

Да, работает, просто я ступил.
Cobalt ©   (06.01.05 23:47) [6]
vertal ©   (07.01.05 1:01) [8]
Ну я думаю тут дело в том, что кол-во знакомых с командами дос больше, чем кол-во знающих апи для работы с консолью ;-)


 
DelphiN! ©   (2005-01-07 11:15) [10]

А не легче WriteLn прогнать много раз ?


 
ламер ©   (2005-01-07 15:14) [11]

FillConsoleOutputCharacter() + FillConsoleOutputAttribute().



Страницы: 1 вся ветка

Текущий архив: 2005.02.20;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.041 c
14-1106970651
Юзвер
2005-01-29 06:50
2005.02.20
Flash-игра


14-1107178827
Fonda
2005-01-31 16:40
2005.02.20
Сортировка в Excel


14-1106824735
rrrr
2005-01-27 14:18
2005.02.20
Небольшой вопрос по Word


14-1107190910
Piter
2005-01-31 20:01
2005.02.20
Проблемы с Half-Life 2


14-1106727696
vidiv
2005-01-26 11:21
2005.02.20
Kerio WR... и http





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский